Я пытаюсь собрать макрос, чтобы открыть диалоговое окно для выбора вашего принтера, а затем напечатать определенный именованный диапазон со специальными свойствами. Я начал с небольшого теста, который работает нормально.Макро для печати Именованный диапазон
Sub test()
' test Macro
Application.Dialogs(xlDialogPrinterSetup).Show
ActiveSheet.PageSetup.PrintArea = "Print_20_Year"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub
Затем я перешел в более крупные пушки, и я не могу заставить его работать правильно. Я включил в макрос MsgBox
, чтобы узнать, запускался ли какой-либо из элементов.
Нет ошибок, нет MsgBox
всплывающее окно. Есть предположения?
EDIT Это мой новый и действующий код. Он отлично работает, buuut, как только я раскомментирую printrowtiles, он ломается. Это код, который он дает непосредственно из записи макроса.
Sub Print_20_Year()
'
' Print_20_Year Macro
'
'
'
' Range("Print_20_Year").Select
MsgBox "Step .4"
Application.Dialogs(xlDialogPrinterSetup).Show
MsgBox "Step .6"
Application.PrintCommunication = False
MsgBox "Step .7"
' With ActiveSheet.PageSetup
' .PrintTitleRows = "$4:$13"
MsgBox "Step .8"
' .PrintTitleColumns = ""
' End With
MsgBox "Step .9"
Application.PrintCommunication = True
MsgBox "Step 1"
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.5)
.RightMargin = Application.InchesToPoints(0.5)
.TopMargin = Application.InchesToPoints(0.5)
.BottomMargin = Application.InchesToPoints(0.5)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperTabloid
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = False
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
MsgBox "Step 2"
ActiveSheet.PageSetup.PrintArea = "Print_20_Year"
MsgBox "Step 3"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub
Я не специалист по макросам любыми способами. Поэтому я записал макрос и пошел на его редактирование, чтобы сделать его динамичным. Все настройки печати (включая '.PrintTitleColumns') не затронуты. Я прочитал, что '.PrintTitleRows' и' Columns' требует 'Application.PrintCommunication = True'. Я предположил, что именно поэтому макрос обрабатывал это таким образом. Обработчик ошибок - хорошая идея. Я попробую завтра утром. –
Я добавил обработчик ошибок, как вы предлагали, но изменений нет. Ошибка не возникает. Я удалил биты и куски, пока не достиг точки, в которой макрос работал с каждой строкой, за исключением 'ActiveSheet.PageSetup.PrintTitleRows =" $ 4: $ 13 "'. Любая идея, почему это просто выйдет из меня из макроса? У меня также есть эти строки в области печати. Может ли это вызвать ошибку? –
Вы говорите, что .PrintCommunication должен быть = True для команды .PrintTitleRows. Тот факт, что у вас есть эта строка, прокомментирован, и что это то, где код выходит из строя, заставляет меня подозревать, что это проблема. Есть ли необработанное исключение? ... – Floris