- ベストアンサー
除外シートの連続印刷をしたい
Vista SP1 Excel2000でマクロを作成中の超初心者です。 マクロコードの修正でエラー続出。四苦八苦しています。どうぞお助けください。 ---------------------------------------------------------------------------- イ)現在使用しているマクロを次のように修正したい。 (1)表紙.xls に次のコードを追加する。 Public Const EXCEPT_NAME = "一覧表, 印刷1, データ集, 請求見本" (2)表紙.xls の次のコードを削除する。 '開始 mySh = Array("A会社", "B会社", "C会社", "D会社",・・・ZZ会社") (3)代わりに、次のコードを使用する。 For Each SheetName In ActiveWorkbook.Worksheets 'すべての会社シートをアクティブにする If InStr(EXCEPT_NAME, SheetName.Name) = 0 Then Sheets(SheetName.Name).Activate ------------------------------ ア)現在の状況 デスクトップにAAフォルダがあります。その中身は 1)表紙.xls------コード記述用(シート名は「表紙」1枚のみ) 2)BBフォルダ 請求書.xls----- シート名(1)A会社, B会社, C会社, D会社,・・・ZZ会社 (2)一覧表, 印刷1, データ集, 請求見本-----このシートは印刷しない。 イ)現在使用しているマクロ Sub 請求書連続印刷() Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Workbooks.Open (ThisWorkbook.Path & "\BBフォルダ\請求書.xls") Worksheets("印刷1").Activate Dim mySh As Variant Dim i As Long '請求印刷面のデータの削除 Worksheets("印刷1").UsedRange.Clear '開始 mySh = Array("A会社", "B会社", "C会社", "D会社",・・・ZZ会社") For i = LBound(mySh) To UBound(mySh) Worksheets(mySh(i)).Unprotect 'プロテクトを外す Call 印刷時削除項目 Worksheets(mySh(i)).Range("A1:Q44").Copy _ Worksheets("印刷1").Cells((i + 1) + 43 * i, 1) Worksheets(mySh(i)).Protect 'プロテクトを掛ける Next Application.CutCopyMode = False Worksheets("印刷1").PrintPreview Application.CutCopyMode = False ActiveWorkbook.Close False
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
QNo.4157687の応用で出来ませんか? コード内容を理解しようとしないとメンテナンスに苦労しますよ。 [F8]キーでワンステップずつ実行したりしてますか? Sub 請求書連続印刷() Const EXCEPT_NAME = "一覧表 印刷1 データ集 請求見本" Dim wb As Workbook Dim ws As Worksheet Dim sh As Worksheet Dim i As Long Application.ScreenUpdating = False On Error Resume Next '開いて作業中の場合。 Set wb = Workbooks("請求書.xls") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\BBフォルダ\請求書.xls") End If Set ws = wb.Worksheets("印刷1") ws.UsedRange.Clear i = 0 For Each sh In wb.Worksheets If InStr(EXCEPT_NAME, sh.Name) = 0 Then sh.Unprotect sh.Activate '『Call 印刷時削除項目』の中味がわからないので。不必要なら削除 Call 印刷時削除項目 sh.Range("A1:Q44").Copy ws.Cells((i + 1) + 43 * i, 1) sh.Protect i = i + 1 End If Next Application.ScreenUpdating = True ws.PrintOut Preview:=True '開いて作業中だったら、未保存で閉じるのは不味いかもしれないのでそこは判断してください。 wb.Close False Set ws = Nothing Set wb = Nothing End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
質問文が長いが、何をしたいのか文章で明確にならないのですか。 読者や回答者には出来るだけ余分なものは読さないでほしい。 余分かどうかは、質問者のプログラムを組む上で、思考訓練になると思う。 質問は困難にぶつかった点だけに出来ないか。例えば質問者にとっては、 Public Const EXCEPT_NAME = "一覧表, 印刷1, データ集, 請求見本"、などは何処かに使うのだろうが、何も疑問は無いでしょう。 プログラムロジックに影響しますか? ーー 「>mySh = Array("・・・)で定義した(シート名)以外」のシート名を印刷したいということか(それがメインテーマでは)?。 それならArrayに該当するシートかどうかIF文で聞いて、見つからなければ印刷する。それだけのことでは。 これに類することは質問者はやっているようだが。 === 違うなら、コードを作るうえでの、判らない課題を箇条書きにでもしたら。
お礼
ありがとうございました。一発で連続印刷できるようになりました。 あなた様のいうとおり、もっと勉強が必要だと痛感しました。今後ともよろしくお願いします。