2016-03-21 1 views
0

У нас есть макрос, который мы запускаем для форматирования страницы для нашего издателя. Существует несколько документов, которые используют этот макрос. Для небольших документов макрос работает без ошибок, для больших документов мы получаем ошибку в строке темы этого потока.Ошибка макроса Word - Ошибка выполнения 4608, Значение вне диапазона

Малый документ - < = 256Кб

Большой документ -> = 500KB

Для документов, которые имеют ошибки, я могу открыть их в Слове и вручную сделать настройки без проблем.

Вот вторая версия макроса

Function pagestuffB() As String 
' 
' Format for Publisher 
' 
' 
Dim rv As String 
rv = "" 
On Error GoTo ErrorHndlr: 
    With Application 
     .Options.Pagination = False 
     .ScreenUpdating = False 
     With .ActiveDocument.PageSetup 
      .PaperSize = wdPaperLetter 
'   .PageWidth = InchesToPoints(8.5) 
'   .PageHeight = InchesToPoints(11) 
      .Orientation = wdOrientPortrait 
      .MirrorMargins = True 'ERROR HERE 
      .TopMargin = InchesToPoints(1.34) 
      .HeaderDistance = InchesToPoints(0.98) 
      .BottomMargin = InchesToPoints(1) 
      .FooterDistance = InchesToPoints(0.8) 
      .LeftMargin = InchesToPoints(1.61) 
      .RightMargin = InchesToPoints(1.4) 
      .Gutter = InchesToPoints(0) 
      .SectionStart = wdSectionContinuous 
      .OddAndEvenPagesHeaderFooter = True 
      .DifferentFirstPageHeaderFooter = True 
      .LineNumbering.Active = False 

      .FirstPageTray = wdPrinterDefaultBin 
      .OtherPagesTray = wdPrinterDefaultBin 
      .VerticalAlignment = wdAlignVerticalTop 
      .SuppressEndnotes = False 
      .TwoPagesOnOne = False 
      .BookFoldPrinting = False 
      .BookFoldRevPrinting = False 
      .BookFoldPrintingSheets = 1 
      .GutterPos = wdGutterPosLeft 
     End With 
    End With 
    pagestuffB = rv 
Exit Function 

ErrorHndlr: 
    If rv = "" Then 
     rv = "Macro error " & Err.Number 
     Select Case Err.Number 
      Case Else 
     End Select 
    End If 

    Resume Next 
End Function 

Версия Информация: Word 2010, VS 2012.

У меня есть документ, который не удалось, и обеспечит его в случае необходимости.

EDIT: Документы here

Это последняя версия макроса, который на самом деле работает, но .... Потребовалось .5 часов форматировать два документа, два из самых маленьких, в приведенной выше ссылке.

Function pagestuffB() As String 
' 
' Format for Publisher 
' 
' 
Dim rv As String 
rv = "" 
On Error GoTo ErrorHndlr: 
    With Application 
     .Options.Pagination = False 
     .ScreenUpdating = False 
     .WindowState = wdWindowStateMinimize 
    End With 
    Dim oSec As Section 
    For Each oSec In Selection.Sections 
     With oSec.PageSetup 
      .Orientation = wdOrientPortrait 'moved per macropod 
      .PaperSize = wdPaperLetter 
      .MirrorMargins = True 
      .TopMargin = InchesToPoints(1.34) 
      .HeaderDistance = InchesToPoints(0.98) 
      .BottomMargin = InchesToPoints(1) 
      .FooterDistance = InchesToPoints(0.8) 
      .LeftMargin = InchesToPoints(1.61) 
      .RightMargin = InchesToPoints(1.4) 
      .Gutter = InchesToPoints(0) 
      .SectionStart = wdSectionContinuous 
      .OddAndEvenPagesHeaderFooter = True 
      .DifferentFirstPageHeaderFooter = True 

      .LineNumbering.Active = False 
      .FirstPageTray = wdPrinterDefaultBin 
      .OtherPagesTray = wdPrinterDefaultBin 
      .VerticalAlignment = wdAlignVerticalTop 
      .SuppressEndnotes = False 
      .TwoPagesOnOne = False 
      .BookFoldPrinting = False 
      .BookFoldRevPrinting = False 
      .BookFoldPrintingSheets = 1 
      .GutterPos = wdGutterPosLeft 
     End With 
    Next oSec 

    pagestuffB = rv 
Exit Function 

ErrorHndlr: 
    If rv = "" Then 
     rv = "Macro error " & Err.Number 
     Select Case Err.Number 
      Case Else 
     End Select 
    End If 

    Resume Next 
End Function 
+0

Просто предположим - попробуйте сделать это в Sub вместо функции. – xidgel

+0

Первоначально, без каких-либо ошибок. Это было добавлено, чтобы помочь отследить ошибку. Функция, чтобы я мог использовать Interop и выполнить его из VS-приложения. – dbasnett

+0

У документов, которые не имеют нескольких разделов? – Comintern

ответ

1

Поэтому я удалил эти три строки кода, и макрос работал очень быстро на моем компьютере для этих двух документов. Похоже, вы использовали записанный макрос для создания этого кода. Конечно, трудно понять, что именно вы хотите, чтобы этот код работал, поскольку нет комментариев, описывающих, что делает ваш код :). Комментарий ниже, если это предложение не устраняет вашу проблему.

.BookFoldPrinting = False 
.BookFoldRevPrinting = False 
.BookFoldPrintingSheets = 1 
+0

Я попробую. Я не человек VBA. Все, что я пытался сделать, это установить поля, и я записал, что сработало. Благодарю. – dbasnett

+0

@dbasnett это решило вашу проблему? Если да, отметьте это как ответ, чтобы закрыть вопрос. Благодаря! – Floam

+0

Когда я вернусь к работе, я это сделаю. – dbasnett

Смежные вопросы