#vba #ms-word
Вопрос:
В нашем документе Word есть макрос, который экспортирует PDF-файл для каждой записи в слиянии почты. При создании документа word всегда добавлял в него пустую страницу, поэтому нам пришлось найти способ удалить последнюю страницу (пустую). Мы добавили .Range(Lr - 1, TargetDoc.Range.End).Delete
строку, и она отлично работала; но только в Word gt; 2007 — когда мы попытались запустить макрос в Word 2007, он сказал :
Option Explicit Const FOLDER_SAVED As String = "F:Postcard" '//Makes sure your folder path ends with a backward slash Const SOURCE_FILE_PATH As String = "G:Laptop DataGoaRegion.xlsm" Sub TestRun() Dim MainDoc As Document, TargetDoc As Document Dim dbPath As String Dim recordNumber As Long, totalRecord As Long Dim Lr As Long Set MainDoc = ActiveDocument With MainDoc.MailMerge '// if you want to specify your data, insert a WHERE clause in the SQL statement .OpenDataSource Name:=SOURCE_FILE_PATH, sqlstatement:="SELECT * FROM [Goa$]" totalRecord = .DataSource.RecordCount For recordNumber = 1 To totalRecord With .DataSource .ActiveRecord = recordNumber .FirstRecord = recordNumber .LastRecord = recordNumber End With .Destination = wdSendToNewDocument .Execute False Set TargetDoc = ActiveDocument With TargetDoc Lr = .GoTo(wdGoToPage, wdGoToLast).Start .Range(Lr - 1, TargetDoc.Range.End).Delete End With TargetDoc.ExportAsFixedFormat FOLDER_SAVED amp; .DataSource.DataFields("Voter").Value amp; ".pdf", exportformat:=wdExportFormatPDF TargetDoc.Close False Set TargetDoc = Nothing Next recordNumber End With Set MainDoc = Nothing End Sub
Что-то не так? Разве Word 2007 не поддерживает эту строку .Range(Lr - 1, TargetDoc.Range.End).Delete
? Будьте добры, проводите… Спасибо!
Комментарии:
1. Работайте с объектной моделью, а не против нее. Проверьте, находится ли начало диапазона в том же разделе, что и конец диапазона. Если нет, то удалите последний раздел документа
Ответ №1:
Попробуй это:
If Not Application.Version = "12.0" Then With TargetDoc Lr = .GoTo(wdGoToPage, wdGoToLast).Start .Range(Lr - 1, TargetDoc.Range.End).Delete End With End If