사용자가 작성한 양식에서 명령 단추를 클릭하면 다음 코드가 실행됩니다. 양식에는 5 페이지가 있지만 10 페이지 중 9 번은 첫 페이지와 다섯 페이지에만 정보가 있습니다. 페이지 2-4는 추가 항목이지만 데이터가 없으면 인쇄하지 않아도됩니다. 현재 코드를 사용하여 인쇄 할 때 다섯 페이지가 모두 인쇄됩니다.Excel에서 VBA를 사용하여 값이 있고 비어있는 페이지를 인쇄합니다.
인쇄 할 적절한 인쇄 영역을 얻으려면 코드에 도움이 필요합니다. 코드의 마지막 줄이 문제인지 또는 인쇄 영역이 계산되는 방법인지 확실하지 않습니다. 설정 범위에서 범위 변수를 설정해야합니까 아니면 인쇄 명령에서 전체 범위를 사용하여 인쇄 영역을 인쇄 할 수 있습니까?
제공되는 도움을 주셔서 감사합니다. 여기에 내가 실행하려고하는 하위가 있습니다.
Private Sub PrintEstimate1_Click()
' Prints the estimate upon clicking once
Dim ws As Worksheet
Set ws = ActiveSheet
Dim page1 As Range
Dim page2 As Range
Dim page3 As Range
Dim page4 As Range
Dim page5 As Range
Set page1 = ws.Range("A2:I58")
Set page2 = ws.Range("A59:I116")
Set page3 = ws.Range("A117:I174")
Set page4 = ws.Range("A175:I232")
Set page5 = ws.Range("A233:I289")
Dim setup As PageSetup
Set setup = ws.PageSetup
If ws.Range("A63").Value = vbNullString Then
setup.PrintArea = Union(page1, page5).Address
ElseIf ws.Range("A121").Value = vbNullString Then
setup.PrintArea = Union(page1, page2, page5).Address
ElseIf ws.Range("A179").Value = vbNullString Then
setup.PrintArea = Union(page1, page2, page3, page5).Address
Else
setup.PrintArea = Union(page1, page2, page3, page4, page5).Address
End If
msg = "Would you like to send to default printer?"
msg = msg & vbNewLine
config = vbYesNoCancel + vbQuestion + vbDefaultButton1
Title = "Printer Selection"
ans = MsgBox(msg, config, Title)
' Dialog Box to decide whether to quick print or make changes to printer setup.
If ans = vbYes Then Worksheets("PE Form").Range("A1:I288").PrintOut Copies:=1, Collate:=True
'I am not sure if it is this line above that is giving me the problem or not.
If ans = vbNo Then Application.Dialogs(xlDialogPrint).Show
If ans = vbCancel Then
End If
End Sub
A63, A121 및 A179가 실제로 비어 있는지 확인하십시오. 모든 5 페이지가 인쇄되면 해당 테스트가 실패했다고 가정합니다. 그 세포들은 하나의 공간을 가질 수 있습니까? 단계별로 실행하면'ElseIf' 명령문의'If'가 실행되거나'Else' 만 실행합니까? – MoondogsMaDawg
예, 셀이 비어 있는지 확인했습니다. 내가 그걸 밟았을 때, A63이 비어있는 첫 번째 IF를 잡아서 인쇄 영역을 Page1과 Page5로 설정했지만, 인쇄 할 때 5 페이지 모두를 인쇄했습니다. – Decoy26
'ans = vbYes Then Worksheets ("PE Form"). 범위 ("A1 : I288"). PrintOut' 여기에 범위를 하드 코드했습니다. 나는 이것이 당신의 인쇄 영역 설정을 무시할 것이라고 생각합니다. '만약 ans = vbYes이면 워크 시트 ("PE Form") .PrintOut' (테스트 안 함). – MoondogsMaDawg