【问题标题】:Populate Word Combobox with Excel data through VBA通过 VBA 使用 Excel 数据填充 Word 组合框
【发布时间】:2012-12-14 23:42:58
【问题描述】:

我是 VBA 新手,所以这几天我一直在为此苦苦挣扎。

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

是否可以向我发送一个适用于 word 2007 的工作示例?看起来很简单,但就是不能让它工作......

提前致谢!

【问题讨论】:

  • SO 不是人们向您发送工作样本的网站。您应该单击页面顶部的常见问题解答链接,以了解有关获得回答的问题类型的更多信息。此外,从 Word 中自动化 Excel 虽然非常可行,但并不简单。
  • 如果只是联系人列表,最好将 xls 文件转换为 CSV 或简单文本文件,并让 word 文件读取文本文件。否则,您将不得不打开 Excel 工作簿 contacts.xls,对于如此简单的事情来说,这会产生很多开销。

标签: excel vba ms-word


【解决方案1】:

如果您打算在 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 项目中的工具->参考并找到您机器上的任何 Excel 库(当然要检查它)。如果需要,有一些方法可以解决这个问题,但更容易。

然后您可以从工作簿中读取值:

oBook.Worksheets(1).cells(1,1)

我不完全确定将它放入组合框中的语法是什么。在 word 中的 vbe 中查找“组合框对象成员”。会有一个列表属性,或类似的东西。

对不起,我现在在一台 linux 机器上,所以我不能为你调试确切的代码。

【讨论】:

    【解决方案2】:

    我现在有更完整的代码给你:

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

    【讨论】:

    • 鲁本,这对你有用吗?是否存在运行时错误需要我们解决?它对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多