2013-02-12 3 views
0

Я пытаюсь собрать макрос, чтобы открыть диалоговое окно для выбора вашего принтера, а затем напечатать определенный именованный диапазон со специальными свойствами. Я начал с небольшого теста, который работает нормально.Макро для печати Именованный диапазон

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 

ответ

0

После долгих ковыряться, я понял, что как-то printtitlerows было взаимодействуя с отдельной UDF я писал видел ниже:

Function IsFormula(c) 
IsFormula = c.HasFormula 
End Function 

Этот UDF был привязан к условному формате, выделенной ячейки, которые имели формулы в ней. Мы используем это, чтобы легко узнать, какую информацию мы должны были изменить/ввести вручную. Я не могу объяснить, почему UDF создавал проблему, но когда я ее удалил, мой макрос работал нормально. После добавления макроса формулы снова я добавил Application.ScreenUpdating = False и Application.ScreenUpdating = True в начале и конце кода. Это устранило проблему.

0

Если у вас нет всплывающих окон MsgBox, вы даже не пропустите первые несколько строк. Я подозреваю, что что-то пойдет не так в самом начале:

Application.Dialogs(xlDialogPrinterSetup).Show 
    ActiveSheet.PageSetup.PrintArea = "Print_20_Year" 
    With ActiveSheet.PageSetup 
     .PrintTitleRows = "$4:$13" 
     .PrintTitleColumns = "" <<<< this worries me. What are you trying to do? 
    End With 
    MsgBox "Step 1"  <<<<< if you don't get here, one of the lines before this causes a silent error... 

Я бы рекомендовал добавление On Error GoTo ErrorHandler заявления в качестве первой линии в ваших подразделах; затем добавить (как правило, только до конца суб)

ErrorHandler: 
    MsgBox "Oops - an error occurred. " & Err.Description 

это может занять немного больше слежки с вашей стороны, чтобы решить ...

+0

Я не специалист по макросам любыми способами. Поэтому я записал макрос и пошел на его редактирование, чтобы сделать его динамичным. Все настройки печати (включая '.PrintTitleColumns') не затронуты. Я прочитал, что '.PrintTitleRows' и' Columns' требует 'Application.PrintCommunication = True'. Я предположил, что именно поэтому макрос обрабатывал это таким образом. Обработчик ошибок - хорошая идея. Я попробую завтра утром. –

+0

Я добавил обработчик ошибок, как вы предлагали, но изменений нет. Ошибка не возникает. Я удалил биты и куски, пока не достиг точки, в которой макрос работал с каждой строкой, за исключением 'ActiveSheet.PageSetup.PrintTitleRows =" $ 4: $ 13 "'. Любая идея, почему это просто выйдет из меня из макроса? У меня также есть эти строки в области печати. Может ли это вызвать ошибку? –

+0

Вы говорите, что .PrintCommunication должен быть = True для команды .PrintTitleRows. Тот факт, что у вас есть эта строка, прокомментирован, и что это то, где код выходит из строя, заставляет меня подозревать, что это проблема. Есть ли необработанное исключение? ... – Floris

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