不能再从 VB6 直接按名称调用工作簿子例程

Workbook Subroutines cannot be called directly by name anymore from VB6

我有一个从 Excel 文件调用宏的 vb6 程序。

直到最近它都运行良好(多年来),但现在它抛出错误。

我们收到 运行时 438 "Object doesn't support this property or method" 错误。

作为示例,您可以使用这个简单的 vb6 程序:

Set App = CreateObject("Excel.Application")
Set wrkbook = App.Workbooks.Open(fileName)
App.visible = True
wrkbook.Test

以上代码不再有效。 相反,如果我们用这个替换最后一行:

wrkbook.Application.Run "ThisWorkbook.Test"

有效。 用于此的 Excel 参考是 "Microsoft Excel 16.0 Object Library"

这已针对 Excel 2010、2013、Excel365 进行了测试,结果相同。 Excel.

中的安全设置也全部关闭

在更改我的整个代码库并使用 Application.Run 之前,我会知道为什么会这样。

使用 Application.Run 也有一些缺点,比如同时调用私有和 public 子程序,并且抛出的异常不会传播回 vb6。

使用 Application.Run 还有其他注意事项吗?

Microsoft 最近是否更改了某些内容(Scurity 更新),还是我做错了什么?

感谢@UuDdLrLrSs 的评论,我发现了问题。
问题是使用早期绑定。
所有 Excel 对象都应使用后期绑定。
更具体地说,工作簿应声明为对象:

Dim wrkbook As Object 'New Excel.Workbook

否则不能recognize/find你的宏方法。