我最近在我的工作中负责客户的文档标准化。他们是政府所以我不能以示例的方式发布任何内容以供参考。遗憾。
我在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
答案 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将使用现有实例,但如果找不到则会失败。)