2016-09-08 4 views
0

인쇄에 대한 아래의 VBA가 작동하지 않는 이유에 대한 간단한 질문 ... 개별적으로 (Sheet1.PrintOut) 설정하면 인쇄가 잘되지만 배열로 처리하면 (Sheet1, Sheet2, Sheet3) .PrintOut 작동하지 않습니다. 왜 그 이유를 설명 할 수 있습니까?Excel vba - 인쇄 (배열)

Sub printnow() 

Dim Sheet1 As Worksheet 
Dim Sheet2 As Worksheet 
Dim Sheet3 As Worksheet 

With ThisWorkbook 

Set Sheet1 = .Sheets("database1") 
Set Sheet2 = .Sheets("database2") 
Set Sheet3 = .Sheets("database3") 

'Setting up the print setup 
Sheet3.PageSetup.PaperSize = xlPaperLegal 

Sheet3.PageSetup.Orientation = xlPortrait 

'Print 

End With 

Array(Sheet1,Sheet2.Sheet3).PrintOut Copies:=1 

End Sub 
+0

을 (Array ("database1", "database2", "database3")). PrintOut Copies : = 1' - Excel의 "Print Acti ve 시트 "옵션을 선택하십시오. – YowE3K

답변

3

Array 함수 호출은 시트 1, 시트 2, 및 Sheet3에 포함 된 Variant() 반환합니다. Variant()에는 .PrintOut 메서드가 없으며 개체가 아닙니다. 당신이 그 위에에 배열, 단지 루프를 객체 의 각 .PrintOut를 호출 할 경우

Dim sheet As Variant 
For Each sheet In Array(Sheet1, Sheet2, Sheet3) 
    sheet.PrintOut Copies:=1 
Next 
3

당신은 Sheets에 시트 이름의 배열을 전달할 수 있으며이를 처리합니다.

Sheets(Array("database1", "database2", "database3")).Printout Copies:=1

또한 Sheet.Name 사용할 수 있습니다

Sheets(Array(Sheet1.Name, Sheet2.Name, Sheet3.Name)).Printout Copies:=1

을 또는 당신은 시트의 인덱스를 사용할 수 있습니다 : 당신은`ThisWorkbook.Sheets을 사용할 수 있습니다

Sheets(Array(1,2,3)).Printout Copies:=1

+0

하지만 내가 선택한 페이지 방향/셀 선택 사양을 유지합니까? – lostinOracle

+0

동일한 인쇄 출력 매개 변수가 있습니다. 매개 변수를 지정하지 않으면 각 시트가 마지막으로 인쇄되었을 때 사용한 설정을 사용합니다. –

+0

은 위의 Sheet1을 Page1, Sheet2를 Page2, Sheet3을 Page3으로 이름을 바꾸고 다른 모든 것은 동일하게 할 수 있습니다. Sheets (Array (Page1, Page2, Page3))를 만들려면 어떻게해야합니까? 또는 유일한 방법은 루프입니다 – lostinOracle