我在使用 Word 中的自动化控制 Excel 时遇到问题,而这应该可以通过 GetObject
函数实现。
我使用的是 Office 2011 for Mac。我的目标是从 Word 文档中获取信息,并将其插入到 Excel 工作簿中最新的此类条目之后。 doc这个词是一个契约(Contract)生成器。每个工作簿将包含大约 30 个相关契约(Contract)的详细信息。我想使用的逻辑是允许用户输入工作簿的名称,然后 VBA 将获取完整路径名和路径,然后能够控制工作簿。然而,我无法让一个更简单的案例发挥作用。
首先,我什至无法使用 word 来控制当前存在的 excel 实例(尽管 CreateObject("Excel.Application")
确实有效。我尝试了早期绑定(bind)并得到了:
automation error (91)
这是产生该结果的代码:
Option Explicit
Sub WorkOnAWorkbook()
Dim Oxl As Excel.Application
Dim owB As Excel.Workbook
Set Oxl = GetObject(, "Excel.Application")
Set owB = Oxl.Workbooks.Open(fileName:="Macintosh HD:Users:User:Desktop:Test.xlsx")
End Sub
我还尝试使用后期绑定(bind),这给了我:
error 424 (object required)
这是产生该结果的代码:
Option Explicit
Sub WorkOnAWorkbook()
Dim Oxl As object
Dim owB As object
Set Oxl = GetObject(, "Excel.Application")
Set owB = Oxl.Workbooks.Open(fileName:="Macintosh HD:Users:User:Desktop:Test.xlsx")
End Sub
我转到工具->引用并添加了 Excel 对象,因此我不确定程序的这个简单部分是否无法工作。
如果有人可以帮助我让这部分工作,并且理想情况下,我的程序部分将允许我收集工作簿的名称(通过输入框,获取输入文件的完整路径名称),我会很高兴然后控制该工作簿。其他一切都可以在我的程序中运行,但我无法让 Word 和 Excel 之间的这个关键桥梁发挥作用。
最佳答案
尝试:
Set owB = Oxl.Workbooks.Open(FileName:="\Macintosh HD\Users\User\Desktop\Test.xlsx")
或者如果这不起作用,请尝试:
Dim myFileName As String
myFileName = Application.GetOpenFilename
Debug.Print myFileName
If myFileName <> "" Then
Set owB = Oxl.Workbooks.Open(FileName:=myFileName)
End If
此外,对于早期绑定(bind),如果您在 Dim 语句中使用 New 关键字,则不需要 GetObject:
Sub WorkOnAWorkbook()
Dim Oxl As New Excel.Application
Dim owB As Excel.Workbook
'Not needed Set Oxl = GetObject(, "Excel.Application")
Set owB ...
End Sub
关于excel - 使用 VBA 通过 Word 控制 Excel 时遇到问题;后期绑定(bind)和早期绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912078/