通过VBA使用Excel数据填充Word Combobox

时间:2012-12-13 14:26:55

标签: excel vba ms-word

我是VBA的新手,所以我现在正在努力解决这个问题。

我在Word中有一个带有联系人的组合框,我还有一个带有一列的excel文件(contacts.xls)(所有联系人的名字)。当我打开Word文档时,宏必须使用excel文件中的所有名称填充组合框。

是否有可能向我发送2007年的一个实际例子?看起来很简单,但是无法让这个工作......

提前致谢!

2 个答案:

答案 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)),但这可能不是真的。