如何在 Word VBA 编辑器中获取 Excel 工作表的自动建议?

How to get autosuggestions for Excel worksheets in Word VBA editor?

通常在使用 VBA 编辑器时,代码会自动从可用的 methods.properties 中为任何被引用的对象提供建议。

我正在尝试使用 Word 文档上的宏将数据从 Excel sheet 提取到 Word 文档中。每当我尝试使用 worksheets.activate 时,都不会出现 activate 的自动提示,这让我认为它没有激活。我也不能在 Excel.

中的 VBA 脚本中使用它

我的脚本还处于起步阶段:

Sub Populate()
 Dim doc As Document
 Set doc = ActiveDocument
 
 Dim appXL As excel.Application
 Set appXL = CreateObject("excel.Application")
 
 Dim partnerNames As excel.Workbook
 Dim ihmNames As excel.Workbook
 Set partnerNames = appXL.Workbooks.Open("D:/Database/Imports and Exports/Funder Credit Lists/2022-01 Partners.csv")
 Set ihmNames = appXL.Workbooks.Open("D:\Database\Imports and Exports\Funder Credit Lists22-01 IHM.csv")
 
 appXL.Worksheets(Left(partnerNames.Name, Len(partnerNames.Name) - 4)).Activate
 
 Dim lastRow As Long
 lastRow = appXL.Cells.Find(What:="*", After:=Range("C1"), SearchOrder:=xlByRows, searchDirection:=xlPrevios).Row
 appXL.Range("A1").Resize(lastRow, 3).Select
 
 'Insert Hero Names
 Dim hero As Range
 Set hero = doc.Range(Start:=doc.Bookmarks("Hero").Start, End:=doc.Bookmarks("Hero").End)
 hero.InsertAfter ("IT WORKS!!!")
 
End Sub

lastRow = appXL.Cells..... 导致类型不匹配,我认为这是由于 appXL.Cells 指的是活动 sheet,而 ActiveDocument 是 Word 文档。
这导致我激活 sheet,但尝试这样做会导致错误“下标超出范围”,即使我明确键入 sheet 名称也是如此。

appXL 是一个 excel.Application 对象。工作表 属性 属于工作簿 class。您可以仅使用 Worksheets.(...) 来引用活动工作簿工作表。与 属性 .Cells

相同

或者您可以定义一个新的 Workbook 变量并对其进行处理:

Dim wbXL as Workbook
set wbXL = ActiveWorkbook
wbXL.Worksheets(...).Activate

看来您只需要在 Word VBA 中添加一个 Excel COM 引用就能够获得自动建议。从 Tools 菜单中选择 References 以显示 References 对话框。 References 对话框显示在操作系统中注册的所有对象库。滚动列表以找到您要引用其对象库的应用程序。勾选 select 的引用被您的项目使用;未被 selected 的将不会被使用,但可以添加。 Select在References对话框的Available References框中选择对象库引用,然后选择OK。您的 Visual Basic 项目现在具有对应用程序对象库的引用。如果您打开 Object Browser(按 F2)和 select 应用程序的库,它会显示 selected 对象库提供的对象,以及每个对象的方法和属性。在 Object Browser 中,您可以 select 在 Classes box 中 class 和 select 方法或 属性 在 Members 框中.

所以问题出在 appXL.Cells.Find 函数中的“After:=Range”部分。我忘了这一点,因为我正在使用 word 文档而不是 excel,我需要指定 appXL.Range 而不仅仅是范围。哦,发现我长达一周的问题只是一个简单的遗漏 class 规范的喜悦。

就是说,感谢@Eugene 告诉我对象浏览器 window。很有用。