我是VBA的新手,所以我现在正在努力解决这个问题。
我在Word中有一个带有联系人的组合框,我还有一个带有一列的excel文件(contacts.xls)(所有联系人的名字)。当我打开Word文档时,宏必须使用excel文件中的所有名称填充组合框。
是否有可能向我发送2007年的一个实际例子?看起来很简单,但是无法让这个工作......
提前致谢!
答案 0 :(得分:0)
如果您打算从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)
我不完全确定将它放入组合框的语法是什么。在单词中查找vbe中的“组合框对象成员”。将有一个列表属性,或类似的东西。
抱歉,我现在正在使用Linux机器,因此我无法为您调试确切的代码。
答案 1 :(得分:0)
我现在有更多完整的代码:
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
请注意,此处进行的错误检查非常少。另外,如果你不想让用户看到它,你可以简单地调用.Close而不是最后调用.Vose(对于最终的项目,这可能是更好的。引用(= Nothing)是很好的做法。有,但VBA在执行结束时自动清理。显然我假设你想要第一个下拉(ContentCOntrols(1)),但这可能不是真的。