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/