2011-11-22 61 views
2

我最近在我的工作中负责了客户端的文档标准化工作。他们是政府,所以我不能以示例的方式发布任何内容以供参考。抱歉。VBA将Microsoft Word书签和选择文本导出到Excel电子表格

我想在VBA中做的是有一个大约80个书签的Word文档(有27个文件,我必须这样做)将书签的.Name.Selection提取到Excel工作表。

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

你好,我的名字是世界!

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

最后一个警告是目前没有任何标准化的东西,所以我需要它在当前打开的文档中循环浏览书签。

我实际上设法找到了一些我想做的事情,然后将我发现的其他一些信息拼接起来创建一些工作,但您必须事先创建所有xls文件。 @RachelHettinger比我自己想出了更多更优雅的答案。为了参考,以下是我的frankenstein:

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 

回答

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将使用现有的实例,但如果找不到,则失败。)

+0

- 感谢您的解决方案! – user1059110

相关问题