VBA将Microsoft Word书签和选择文本导出到Excel电子表格

时间:2011-11-22 05:20:09

标签: excel vba ms-word bookmarks

我最近在我的工作中负责客户的文档标准化。他们是政府所以我不能以示例的方式发布任何内容以供参考。遗憾。

我在VBA中尝试做的是拥有一个包含大约80个书签的Word文档(我必须执行此操作的27个文件)提取书签的.Name.Selection到Excel表格。

作为一个例子,我提供以下内容:

  

您好,我的名字是世界!

如果以上是word文档, World! 是书签的.Selection,(Doc_World)将是书签名称。我正在尝试编写将"Doc_World""World!"写入Excel工作表的宏。

最后一点需要注意的是,目前没有任何标准化,因此我需要在当前打开的文档中循环显示书签。

我实际上设法找到了我想要的东西,然后将我发现的其他信息拼接在一起创建了一些有用的东西,但是你必须事先创建所有的xls文件。 @RachelHettinger有一个比我自己提出的更优雅的答案。为了便于参考,以下是我的弗兰肯斯坦:

Sub WdBkMktoXL()
Dim ObjExcel As Object, ObjWorkBook As Object, ObjWorksheet As Object
Dim Bmk() As String
Dim x As Integer, J As Integer

Set ObjExcel = CreateObject("EXCEL.APPLICATION")
Set ObjWorkBook = ObjExcel.Workbooks.Open("C:\Users\Zach\Desktop\ETTP\TermsAndConditions\1.xlsx")
Set ObjWorksheet = ObjWorkBook.Worksheets("Sheet1")

x = ActiveDocument.Bookmarks.Count
ReDim Bmk(x)
For J = 1 To x
Bmk(J) = ActiveDocument.Bookmarks(J).Name
ObjWorksheet.Range("A" & J) = ActiveDocument.Bookmarks(J).Range.Text
ObjWorksheet.Range("B" & J) = ActiveDocument.Bookmarks(J).Name
Next J

ObjWorkBook.Save
ObjWorkBook.Close
Set ObjWorksheet = Nothing
Set ObjWorkBook = Nothing
ObjExcel.Quit
Set ObjExcel = Nothing
End Sub

1 个答案:

答案 0 :(得分:4)

如果我理解你的需要,这个宏应该有所帮助。它遍历活动文档中的所有书签,并将它们导出到Excel中的新文件:

Sub ExportBookmarksToExcel()
    Dim bk As Bookmark
    Dim appXl As Excel.Application
    Dim wbk As Excel.Workbook
    Dim wst As Excel.Worksheet
    Dim lRow As Long

    Set appXl = CreateObject("Excel.Application")
    With appXl
        .Visible = True
        Set wbk = .Workbooks.Add
        Set wst = wbk.Worksheets(1)
        lRow = 1
        wst.Cells(lRow, 1) = "Bookmark name"
        wst.Cells(lRow, 2) = "Bookmark text"
        wst.Rows(lRow).Font.Bold = True
    End With

    For Each bk In ActiveDocument.Bookmarks
        lRow = lRow + 1
        wst.Cells(lRow, 1) = bk.Name
        wst.Cells(lRow, 2) = bk.Range.Text
    Next bk
    wst.UsedRange.Columns.AutoFit

End Sub

注1:由于此代码使用早期绑定,因此需要引用Excel库(工具:参考)。 注意2:它使用CreateObject创建Excel实例,因此每次运行宏时,都会创建一个新实例。 (GetObject将使用现有实例,但如果找不到则会失败。)