Ошибка 4608 : ошибка «значение вне диапазона» в MS Word VBA (только в word 2007)

#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