Excel VBA вставляет пустые текстовые закладки документа перед вставкой текста - PullRequest
0 голосов
/ 21 января 2019

У меня есть книга Excel, из которой я вставляю данные во встроенный (внутри моей книги) файл Word. У меня есть предопределенные закладки. Я вставляю текст закладки из ячеек книги Excel. Все отлично работает, кроме удаления импортированных данных из закладок. Проблема в том, что с моим кодом после нескольких запусков записывает данные в закладки. Так, например, после 3-х запусков у меня «SwedenSwedenSweden».

Я хотел бы обнулить закладки перед вставкой данных objWord.Bookmarks.Item("Country").Range = "", похоже, не работает. С помощью этой команды я пытаюсь обнулить закладки перед вводом новых и после выхода из моего шаблона Word. Есть хорошие решения?

Sub testInsertBookmark()
Const wdFormatDocument = 0
Dim sh As Shape
Dim objWord As Object ''Word.Document
Dim objOLE As OLEObject
Dim wSystem As Worksheet
Dim BMRange As Range
On Error Resume Next

Set wSystem = Worksheets("Templates")
''The shape holding the object from 'Create from file'
''Object 2 is the name of the shape
Set sh = wSystem.Shapes("Object 1")
''Activate the contents of the object
sh.OLEFormat.Activate
''The OLE Object contained
Set objOLE = sh.OLEFormat.Object
''This is the bit that took time
Set objWord = objOLE.Object

 objWord.Bookmarks.Item("Name").Range = ""
 objWord.Bookmarks.Item("Title").Range = ""
 objWord.Bookmarks.Item("Telephone").Range = ""
 objWord.Bookmarks.Item("Company").Range = ""
 objWord.Bookmarks.Item("Address").Range = ""
 objWord.Bookmarks.Item("Postcode").Range = ""
 objWord.Bookmarks.Item("City").Range = ""
 objWord.Bookmarks.Item("Country").Range = ""

 objWord.Bookmarks.Item("Name").Range.Text = ThisWorkbook.Sheets("MAIN").Range("D5").Value
 objWord.Bookmarks.Item("Title").Range.Text = ThisWorkbook.Sheets("MAIN").Range("D6").Value
 objWord.Bookmarks.Item("Telephone").Range.Text = ThisWorkbook.Sheets("MAIN").Range("D7").Value
 objWord.Bookmarks.Item("Company").Range.Text = ThisWorkbook.Sheets("MAIN").Range("D8").Value
 objWord.Bookmarks.Item("Address").Range.Text = ThisWorkbook.Sheets("MAIN").Range("D9").Value
 objWord.Bookmarks.Item("Postcode").Range.Text = ThisWorkbook.Sheets("MAIN").Range("D10").Value
 objWord.Bookmarks.Item("City").Range.Text = ThisWorkbook.Sheets("MAIN").Range("D11").Value
 objWord.Bookmarks.Item("Country").Range.Text = ThisWorkbook.Sheets("MAIN").Range("D12").Value

objWord.Application.Visible = True

''Easy enough
    objWord.SaveAs2 ActiveWorkbook.Path & "\" & Sheets("Other Data").Range("AN2").Value & ", " & Sheets("Other Data").Range("AN7").Value & "_" & Sheets("Other Data").Range("AN8").Value & "_" & Sheets("Other Data").Range("AX10").Value & ".pdf", 17

 objWord.Bookmarks.Item("Name").Range = ""
 objWord.Bookmarks.Item("Title").Range = ""
 objWord.Bookmarks.Item("Telephone").Range = ""
 objWord.Bookmarks.Item("Company").Range = ""
 objWord.Bookmarks.Item("Address").Range = ""
 objWord.Bookmarks.Item("Postcode").Range = ""
 objWord.Bookmarks.Item("City").Range = ""
 objWord.Bookmarks.Item("Country").Range = ""

sh.OLEFormat.Delete

ThisWorkbook.Worksheets("MAIN").Activate

End Sub

1 Ответ

0 голосов
/ 21 января 2019

Запись данных в закладку, которая отмечает позицию (а не содержит контент), даст результат, который вы описываете.Чтобы заставить это работать, используйте закладку, которая содержит контент - по крайней мере, после первой вставки.При записи в такую ​​закладку она удаляется при замене содержимого, поэтому необходимо также воссоздать закладку.Например:

Dim wdRange as Object 'Word.Range
Set wdRange = objWord.Bookmarks.Item("Name").Range
wdRange.Text = ThisWorkbook.Sheets("MAIN").Range("D5").Value
objWord.Bookmarks.Add "Name", wdRange 

Это воссоздает закладку вокруг нового контента.Нет необходимости удалять контент / устанавливать его на «», так как он будет заменен.

Я бы предложил поместить это в отдельную процедуру, которая может быть вызвана из основного кода.Передайте в objWord имя закладки и диапазон Excel или его данные.

...