我是 VBA 的新手,所以我已经为此苦苦挣扎了几天。
我在 Word 中有一个带有联系人的组合框,我还有一个带有一列(所有联系人的名称)的 excel 文件(contacts.xls)。当我打开 Word 文档时,宏必须用 excel 文件中的所有名称填写组合框。
是否可以向我发送一个适用于 2007 年单词的工作示例?看起来很简单,但就是不能让它工作......
提前致谢!
如果您打算在 Word 中读取 Excel 文件,则必须打开它。它将使用如下代码:
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
'Start a new workbook in Excel
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Open("FileName.xlsx")
您可能还想去 VB 项目中的 Tools->References 并找到您机器上的任何 Excel 库(当然要检查它)。如果需要,有一些方法可以解决这个问题,但它更容易。
然后,您可以从工作簿中读取值:
oBook.Worksheets(1).cells(1,1)
我不完全确定将其放入组合框中的语法是什么。在 word 中的 vbe 中查找“组合框对象成员”。会有一个列表属性,或类似的东西。
对不起,我现在在一台 linux 机器上,所以我不能为你调试确切的代码。
我现在有更完整的代码给你:
Option Explicit
Sub TestDropDownFromExcel()
Dim counter As Long
Dim xlApp As Excel.Application
Dim xlBook As Workbook
Dim oCC As ContentControl
Set oCC = ActiveDocument.ContentControls(1)
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\Path\To\MyFile.xlsx")
If xlBook Is Nothing Then
Exit Sub
End If
oCC.DropdownListEntries.Clear
For counter = 1 To 10
oCC.DropdownListEntries.Add Text:=xlBook.Worksheets(1).Cells(counter, 1), Value:=CStr(counter)
Next counter
xlApp.Visible = True
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
请注意,这里几乎没有进行错误检查。此外,如果您不希望用户看到它,而不是最后调用 .Visible ,您可以简单地调用 .Close (对于最终项目,这可能是更可取的。deferencing (= Nothing) 是一个很好的做法有,但VBA会在执行结束时自动清理.显然我假设你想要第一个下拉菜单(ContentCONtrols(1)),但这可能不是真的.