excel - CONCATENATE 在 Excel VBA 中不起作用

标签 excel vba

Excel 16.0
window 10
联想 Z70-80
Intel(R) Core i7-5500U CPU @ 2.40 Ghz, 2401 Mhz, 2 Cores, 4 Logical

我正在尝试使用我找到的 excel GUID 子例程。它在用作单元格中的公式时非常有效,但在作为子例程模块调用时不起作用。

= CONCATENATE(DEC2HEX(RANDBETWEEN(0, 4294967295), 8), "-", DEC2HEX(RANDBETWEEN(0, 42949), 4), "-", DEC2HEX(RANDBETWEEN(0, 42949), 4), "-", DEC2HEX(RANDBETWEEN(0, 42949), 4), "-", DEC2HEX(RANDBETWEEN(0, 4294967295), 8), DEC2HEX(RANDBETWEEN(0, 42949), 4))

我已经把它分开了,发现问题是 CONCATENATE 函数,它得到一个运行时错误“438”:对象不支持这个属性或方法。

我安装了 atpvbaen.xls 和 VBAProject 附加组件。附加组件显示在工具引用下,它们显示在我的项目文件夹上方的 VBA 编辑器文件资源管理器中。

一些附加功能可以工作,例如 Dec2Hex 和 RandBetween。

从子例程调用

作品 --> p = Application.WorksheetFunction.RandBetween(1, 999)

作品 --> p = Application.WorksheetFunction.Dec2Hex(1234, 5)

没有工作 --> p = Application.WorksheetFunction.CONCATENATE("-", "a")

作为单元格中的公式

作品 --> =CONCATENATE("-","a")

作品 --> =CONCATENATE(8,"a")

作品 --> =CONCATENATE((RANDBETWEEN(1, 999)),"XXX")

我花了几个小时寻找帮助和测试,我将非常感谢一些指导。
谢谢 - 加里

最佳答案

Concatenate不是可以从 VBA 调用的 Excel 函数。您可以使用 Join()或简单的串联,& , 反而。如果您真的不喜欢在调用 Join() 之前将参数包装在数组中,您可以自己滚动:

Function Concatenate(ParamArray Strings()) As String
    Concatenate = Join(Strings, "")
End Function

像这样使用:
Sub Test()
    Debug.Print Concatenate("A", "B", "C")
End Sub

仅打印 ABC到即时窗口。

documentation讨论为什么 CONCATENATE不能从 VBA 调用:

Note  Some worksheet functions aren't useful in Visual Basic. For example, the Concatenate function isn't needed because in Visual Basic you can use the & operator to join multiple text values.

关于excel - CONCATENATE 在 Excel VBA 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47602380/

相关文章:

vba - 为什么我不能传递数组(数组内)作为参数?

Java Apache POI Excel 文件使用诸如 HeaderColumn 策略之类的方法映射到数据库对象中?

java - 从 pdf 表格中填写 excel 中的特定字段

vba - CDbl() 问题和类型不匹配

MySQL ODBC 在 Excel VBA 中将小数显示为空

vba - 当公式重新计算中仅特定 Excel 单元格发生更改时调用函数

vba - 是否可以从excel创建可填写的PDF?

Excel 崩溃设置工作表可见性

excel - VBA Selenium FindElementByXPath 找不到元素

excel - 从列中删除前导零(非功能)