簡體   English   中英

使用書簽將 excel 單元格(例如 A1:C10)復制到 Word 文檔而不刪除書簽

[英]Copying excel cells (ex. A1:C10) to word document using bookmarks without deleting the bookmarks

我試圖找到解決方案,但收效甚微。 我成功地更新了我的 Word 文檔,但只有一次。 我檢查了 word 文檔,書簽已經消失,所以第二次不起作用,除非我在 Word 文檔中再次添加書簽。 請找到下面的代碼,讓我知道可以做些什么來實現所需的。 謝謝!!

Sub Rectangle2_Click()
Dim tbl As Excel.Range
Dim WordApp As Word.Application
Dim myDoc As Word.Document
Dim WordTable As Word.Table

'Optimize Code
 Application.ScreenUpdating = False
 Application.EnableEvents = False

'Copy Range from Excel
 Set tbl = ThisWorkbook.Worksheets("Sheet1").Range("C6:M10")

'Create an Instance of MS Word
 On Error Resume Next

'Is MS Word already opened?
  Set WordApp = GetObject(class:="Word.Application")

'Clear the error between errors
  Err.Clear

'If MS Word is not already open then open MS Word
  If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")

'Handle if the Word Application is not found
  If Err.Number = 429 Then
    MsgBox "Microsoft Word could not be found, aborting."
    GoTo EndRoutine
  End If

 On Error GoTo 0

'Make MS Word Visible and Active
 WordApp.Visible = True
 WordApp.Activate

'Open the Report
 Set myDoc = WordApp.Documents.Open("C:\Users\Test.docx")

'Copy Excel Table Range
 tbl.Copy

'Delete old Table in MS Word & Paste New Table into MS Word
 Dim bkm As Bookmark
 For Each bkm In ActiveDocument.Bookmarks
    If bkm.Name = bkmname Then
        If bkm.Range.Information(wdWithInTable) = True Then
            bkm.Range.Expand (wdCell)
            bkm.Range.Cells.Delete
        End If
    End If
 Next bkm

myDoc.Bookmarks(1).Range.PasteExcelTable _
LinkedToExcel:=False, _
WordFormatting:=False, _
RTF:=False

'Autofit Table so it fits inside Word Document
 Set WordTable = myDoc.Tables(1)
 WordTable.AutoFitBehavior (wdAutoFitWindow)

 EndRoutine:
'Optimize Code
 Application.ScreenUpdating = True
 Application.EnableEvents = True

'Clear The Clipboard
 Application.CutCopyMode = False

'Closing the MS Word
 ActiveDocument.Close SaveChanges:=wdSaveChanges
 End Sub

注意:我是第一次純粹使用 VBA,但已經從不同的來源拼湊起來,希望能記住正確的邏輯

有一種方法可以重用書簽,但如果我正確理解您在做什么,那么您最好為每次迭代創建一個模板文件 (.dotx) 並從中生成一個文檔。

你的代碼應該是

Set myDoc = Documents.Add("template path") 

並使用Document.SaveAs方法保存每個文檔。

書簽將保持不變,因為您的代碼始終與從模板創建的新文檔一起使用。

附加說明:由於您要聲明一個對象 (myDoc),請使用它而不是 ActiveDocument! 這將使您的代碼更加健壯,因為用戶或其他代碼可能會更改 Word UI 中當前處於活動狀態的文檔。 因此,例如:

For Each bkm In myDoc.Bookmarks

如果您需要保留書簽,這樣做的方法是首先保存書簽范圍,將內容分配給書簽(刪除它),然后恢復范圍周圍的書簽。 就像是:

Dim rngBkm as Word.Range
For Each bkm In myDoc.Bookmarks
  If bkm.Name = bkmname Then
    Set rngBkm = bkm.Range
    rngBkm.Text = "new content"
    myDoc.Bookmarks.Add(rngBkm, bkmname)
  End If
Next    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM