2016-05-25 8 views
2

複数のワークシートを1つのジョブとして印刷するには、ユーザーが印刷したいワークシートを基にして印刷する必要があります。ユーザーの選択に基づいて複数のワークシートを一度に印刷

私はワークシートを持っています。ここでは、列Aにブック内のすべてのワークシートのリストがあります。列Bにはdropdownのリストがあり、ユーザはそのシートを印刷するかどうかを示すためにYまたはNを選択します。

私のコードは、1つのジョブとして列BのYを持つすべてのワークシートを印刷することを想定しています。私はFirstSheetPrintと呼ばれるセル参照を持っています。これは、B列にYがあるワークシートのリストにある最初のワークシートの名前をコピーします。次に、その名前を取り、その周りにワークシート名として使用できるように追加しますその後、私はYを持つすべての行をループし、 ""とワークシート名を1つの文字列に追加します(ループが続行すると文字列は増加し続けます)。

私の問題は、最終的に配列にこのシート名の文字列を割り当てようとするとエラーが発生するということです。最後の文字列がどのように見えるかを示すメッセージボックスのスクリーンショットと、エラーのスクリーンショットを追加しました。

enter image description here

任意の助けいただければ幸いです!

Sub PrintAllSheets() 

Application.ScreenUpdating = False 
Application.EnableEvents = False 

Dim DoesPrint As Boolean 
Dim SheetsToPrint As String 
Dim SheetCount As Integer 
Dim StartCount As Integer 
Dim StartRange As String 
Dim totalString As String 

DoesPrint = Application.Dialogs(xlDialogPrinterSetup).Show 

If DoesPrint = False Then 
Application.ScreenUpdating = True 
Application.EnableEvents = True 
Exit Sub 
Else 
End If 

SheetsToPrint = Sheets("Printing").Range("FirstSheetPrint").Value 
SheetCount = Sheets("Printing").Range("SheetsToPrintCount").Value 
StartCount = 4 

If SheetsToPrint = "N" Then 
    MsgBox "Please select which sheets you would like to print" 
    Application.ScreenUpdating = True 
    Application.EnableEvents = True 
    Exit Sub 
Else 
    SheetsToPrint = ("""" & SheetsToPrint & """") 
    For i = 1 To SheetCount 

     If Sheets("Printing").Range("N" & StartCount).Value > 0 Then 
      SheetsToPrint = (SheetsToPrint & ", " & """" & Sheets("Printing").Range("L" & StartCount).Value & """") 
      StartCount = StartCount + 1 
     Else 
      StartCount = StartCount + 1 
     End If 
    Next i 

    MsgBox ("We will print: " & SheetsToPrint) 
End If 

Sheets(Array(SheetsToPrint)).PrintOut 


Application.ScreenUpdating = True 
Application.EnableEvents = True 

End Sub 

Error Message Message Box

+0

シート名または範囲名が正しいかどうかを確認してください – 0m3r

+0

シート名が正しいかどうかです。コピー/ペーストを使用して、すべてが100%正確であることを確認しました。私は問題が 'Sheets(Array(SheetsToPrint))の実際の構文であると仮定しています。Printout'コード –

答えて

2

これを試してみてください、コードがテストされていません。

Sub PrintAllSheets() 
Application.ScreenUpdating = False 
Application.EnableEvents = False 

Dim DoesPrint  As Boolean 
Dim SheetsToPrint As String 
Dim SheetCount  As Integer 
Dim StartCount  As Integer 
Dim MyArr()   As String 
Dim StartRange  As String 
Dim totalString  As String 
Dim i    As Long 

DoesPrint = Application.Dialogs(xlDialogPrinterSetup).Show 

If DoesPrint = False Then 
    Application.ScreenUpdating = True 
    Application.EnableEvents = True 
    Exit Sub 
End If 

SheetsToPrint = Sheets("Printing").Range("FirstSheetPrint").Value 
SheetCount = Sheets("Printing").Range("SheetsToPrintCount").Value 
StartCount = 4 

If SheetsToPrint = "N" Then 
    MsgBox "Please select which sheets you would like to print" 
    Application.ScreenUpdating = True 
    Application.EnableEvents = True 
    Exit Sub 
Else 
    'SheetsToPrint = ("""" & SheetsToPrint & """") 'Not sure if this is needed 
    For i = 1 To SheetCount 
     If Sheets("Printing").Range("N" & StartCount).Value > 0 Then 
      SheetsToPrint = (SheetsToPrint & "," & Sheets("Printing").Range("L" & StartCount).Value) 
      StartCount = StartCount + 1 
     Else 
      StartCount = StartCount + 1 
     End If 
    Next i 
    MsgBox ("We will print: " & SheetsToPrint) 
End If 

'Split the string into an array 
MyArr = Split(SheetsToPrint, ",") 

'Print the array 
Sheets(MyArr).PrintOut 

Application.ScreenUpdating = True 
Application.EnableEvents = True 

End Sub 
+0

これは単なるシートをすべて印刷します。私はpdfに印刷するので、すべての作業を1つのジョブとして印刷する必要があります。この方法を使用すると、すべてのワークシートは別のファイルになります。 –

+0

私のコメントを参照してください: 'これは1ライナーとしても動作するはずです。 'シート(MyArr).PrintOut –

+0

ええ、私はそれを実行した後に気がつきました。それは動作しますが、何らかの理由でそれを3つのジョブに分割します。私は16枚のワークシートを印刷しています。それは最初の10、次に4、そして2を印刷します。しかし、それは動作します!どうもありがとうございます! –

関連する問題