2015-04-20 7 views
0

В настоящее время я делаю большую книгу, пытаясь получить ее, так что в конце каждого месяца я запускаю макрос, который генерирует новый лист.excel VBA, пытаясь распечатать область?

У меня это отсортировано сейчас.

Далее есть макрос, который дает пользователю возможность печатать только соответствующую информацию с листа.

Это становится сложным! Поскольку некоторые столбцы в середине данных не должны печататься, однако я все же хочу, чтобы они были видны в любое другое время.

Мое решение:

(обратите внимание, что я довольно новыми для VBA, и это было довольно сложно для меня, так что я просто использовал записи макросов)

Я разбить его на два этапа, один макрос вызывается нажатием кнопки «Создать область печати» на листе, а следующий - макросом, вызываемым кнопкой «Отправить на принтер»

Создать макрос в области печати. ​​Скрывает все нежелательные столбцы, затем выделяет все ячейки с «$ B $ 1: $ Y $ 567 ", затем делает эту область печати.

Отправить в макрос принтера - отправка области печати на принтер. У него есть настройки размера A3, которые соответствуют ширине столбцов, и имеют значение $ 1: $ 1 в качестве заголовка печати, а в остальном - только параметры по умолчанию, которые я думаю. Затем я показываю ячейки, скрытые от запуска макроса области печати.

Проблема: Пока что первый макрос работает, и, по большому счету, второй макрос работает. Однако, несмотря на печать в правильном размере, правильном количестве столбцов и правильных титрах печати, он печатает все строки на листе. (т. е. не отсекается на строке 567). Это не огромная проблема, так как у меня есть только 10 строк данных после 567, но это немного раздражает, так как это означает, что создается лишняя лишняя страница, а также она выглядит немного грязной. В идеале я мог бы избавиться от этих дополнительных строк распечатаны.

Любые предложения? Я провел годы, пытаясь понять это без успеха.

Прилагается мой код для второго макроса (обратите внимание на длинные и грязные, как это делается с помощью макрорекордера).

Sub printSheetSend() 
' 
' printSheetSend Macro 
' 

' 
Application.Goto Reference:="Print_Area" 
Application.PrintCommunication = False 
With ActiveSheet.PageSetup 
    .PrintTitleRows = "$1:$1" 
    .PrintTitleColumns = "" 
End With 
Application.PrintCommunication = True 
ActiveSheet.PageSetup.PrintArea = "$B$1:$Y$567" 
Application.PrintCommunication = False 
With ActiveSheet.PageSetup 
    .LeftHeader = "" 
    .CenterHeader = "" 
    .RightHeader = "" 
    .LeftFooter = "" 
    .CenterFooter = "" 
    .RightFooter = "" 
    .LeftMargin = Application.InchesToPoints(0.7) 
    .RightMargin = Application.InchesToPoints(0.7) 
    .TopMargin = Application.InchesToPoints(0.75) 
    .BottomMargin = Application.InchesToPoints(0.75) 
    .HeaderMargin = Application.InchesToPoints(0.3) 
    .FooterMargin = Application.InchesToPoints(0.3) 
    .PrintHeadings = False 
    .PrintGridlines = False 
    .PrintComments = xlPrintNoComments 
    .PrintQuality = 600 
    .CenterHorizontally = False 
    .CenterVertically = False 
    .Orientation = xlLandscape 
    .Draft = False 
    .PaperSize = xlPaperA3 
    .FirstPageNumber = xlAutomatic 
    .Order = xlDownThenOver 
    .BlackAndWhite = False 
    .zoom = 100 
    .PrintErrors = xlPrintErrorsDisplayed 
    .OddAndEvenPagesHeaderFooter = False 
    .DifferentFirstPageHeaderFooter = False 
    .ScaleWithDocHeaderFooter = True 
    .AlignMarginsHeaderFooter = True 
    .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 
Application.PrintCommunication = False 
With ActiveSheet.PageSetup 
    .PrintTitleRows = "$1:$1" 
    .PrintTitleColumns = "" 
End With 
Application.PrintCommunication = True 
ActiveSheet.PageSetup.PrintArea = "$B$1:$Y$567" 
Application.PrintCommunication = False 
With ActiveSheet.PageSetup 
    .LeftHeader = "" 
    .CenterHeader = "" 
    .RightHeader = "" 
    .LeftFooter = "" 
    .CenterFooter = "" 
    .RightFooter = "" 
    .LeftMargin = Application.InchesToPoints(0.7) 
    .RightMargin = Application.InchesToPoints(0.7) 
    .TopMargin = Application.InchesToPoints(0.75) 
    .BottomMargin = Application.InchesToPoints(0.75) 
    .HeaderMargin = Application.InchesToPoints(0.3) 
    .FooterMargin = Application.InchesToPoints(0.3) 
    .PrintHeadings = False 
    .PrintGridlines = False 
    .PrintComments = xlPrintNoComments 
    .PrintQuality = 600 
    .CenterHorizontally = False 
    .CenterVertically = False 
    .Orientation = xlLandscape 
    .Draft = False 
    .PaperSize = xlPaperA3 
    .FirstPageNumber = xlAutomatic 
    .Order = xlDownThenOver 
    .BlackAndWhite = False 
    .zoom = False 
    .FitToPagesWide = 1 
    .FitToPagesTall = 1 
    .PrintErrors = xlPrintErrorsDisplayed 
    .OddAndEvenPagesHeaderFooter = False 
    .DifferentFirstPageHeaderFooter = False 
    .ScaleWithDocHeaderFooter = True 
    .AlignMarginsHeaderFooter = True 
    .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 
Application.PrintCommunication = False 
With ActiveSheet.PageSetup 
    .PrintTitleRows = "$1:$1" 
    .PrintTitleColumns = "" 
End With 
Application.PrintCommunication = True 
ActiveSheet.PageSetup.PrintArea = "$B$1:$Y$567" 
Application.PrintCommunication = False 
With ActiveSheet.PageSetup 
    .LeftHeader = "" 
    .CenterHeader = "" 
    .RightHeader = "" 
    .LeftFooter = "" 
    .CenterFooter = "" 
    .RightFooter = "" 
    .LeftMargin = Application.InchesToPoints(0.7) 
    .RightMargin = Application.InchesToPoints(0.7) 
    .TopMargin = Application.InchesToPoints(0.75) 
    .BottomMargin = Application.InchesToPoints(0.75) 
    .HeaderMargin = Application.InchesToPoints(0.3) 
    .FooterMargin = Application.InchesToPoints(0.3) 
    .PrintHeadings = False 
    .PrintGridlines = False 
    .PrintComments = xlPrintNoComments 
    .PrintQuality = 600 
    .CenterHorizontally = False 
    .CenterVertically = False 
    .Orientation = xlLandscape 
    .Draft = False 
    .PaperSize = xlPaperA3 
    .FirstPageNumber = xlAutomatic 
    .Order = xlDownThenOver 
    .BlackAndWhite = False 
    .zoom = False 
    .FitToPagesWide = 1 
    .FitToPagesTall = 0 
    .PrintErrors = xlPrintErrorsDisplayed 
    .OddAndEvenPagesHeaderFooter = False 
    .DifferentFirstPageHeaderFooter = False 
    .ScaleWithDocHeaderFooter = True 
    .AlignMarginsHeaderFooter = True 
    .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 

' ADD: send shit to printer here 
Columns("G:G").Select 
Selection.EntireColumn.Hidden = False 
Columns("I:I").Select 
Selection.EntireColumn.Hidden = False 
Columns("L:L").Select 
Selection.EntireColumn.Hidden = False 
Columns("O:O").Select 
Selection.EntireColumn.Hidden = False 
Columns("T:T").Select 
Selection.EntireColumn.Hidden = False 
Columns("U:U").Select 
Selection.EntireColumn.Hidden = False 
Columns("V:V").Select 
Selection.EntireColumn.Hidden = False 
Range("B1").Select 
End Sub 
+0

Вы думали о создании нового листа, копирование все, что вы хотите, что новый лист, печатая на этом новом листе, а затем удалив его? Это можно сделать в vba btw. – FairlyLegit

+0

Ах да, это неплохая идея! В идеале, если есть и легко исправить то, что у меня есть, я бы предпочел сделать это (также было бы интересно узнать, что происходит в данный момент), но если бы я не смог это сделать. Я могу получить его, чтобы лист был буквально напечатан физически, а затем автоматически удаляется? Поскольку человек, который использует этот лист, не очень хорош в Excel, и в конце года у меня будет 14 листов на рабочем столе, поэтому я хочу уменьшить беспорядок! –

+0

Может быть легко исправить, но поскольку код примера, который вы предоставили, очень длинный (из-за макрозаписывающего устройства), я не могу найти его. Вероятно, есть один, но я не могу найти его. – FairlyLegit

ответ

0

Так я пишу этот код для печати Колонка A, B и D, а не печати Колонка C.

A___B___C___D 
1 2 3 4 
1 2 3 4 
1 2 3 4 


Dim ws as Worksheet 
Dim TotalRows as Long 
Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) 
ws.Name = "Delete" 
TotalRows = ws.Range("A" & Rows.Count).End(xlUp).Row 
ActiveSheet.Range("A" & Rows.Count).End(xlUp).Copy 
ws.Range("A1").PasteSpecial 
ActiveSheet.Range("B" & Rows.Count).End(xlUp).Copy 
ws.Range("B1").PasteSpecial 
ActiveSheet.Range("C" & Rows.Count).End(xlUp).Copy 
ws.Range("C1").PasteSpecial 
ws.PageSetup.PrintArea = ws.Range("A1:C" & TotalRows) 
ws.PrintOut 
Application.EnableEvents = False 
ws.Delete 
Application.EnableEvents = True 

Так что, если все пойдет хорошо, я буду получать распечатку, которая выглядит как

A__B__D 
1 2 4 
1 2 4 
1 2 4 

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

0

Извините! Игнорируйте этот вопрос!

Оказывается, кто-то добавил комментарии в таблицу, и они печатали, как хорошо .. Код отлично :)

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