2011-11-22 88 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

相關問題