• ベストアンサー

除外シートの連続印刷をしたい

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

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.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

aitaine
質問者

お礼

ありがとうございました。一発で連続印刷できるようになりました。 あなた様のいうとおり、もっと勉強が必要だと痛感しました。今後ともよろしくお願いします。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

質問文が長いが、何をしたいのか文章で明確にならないのですか。 読者や回答者には出来るだけ余分なものは読さないでほしい。 余分かどうかは、質問者のプログラムを組む上で、思考訓練になると思う。 質問は困難にぶつかった点だけに出来ないか。例えば質問者にとっては、 Public Const EXCEPT_NAME = "一覧表, 印刷1, データ集, 請求見本"、などは何処かに使うのだろうが、何も疑問は無いでしょう。 プログラムロジックに影響しますか? ーー 「>mySh = Array("・・・)で定義した(シート名)以外」のシート名を印刷したいということか(それがメインテーマでは)?。 それならArrayに該当するシートかどうかIF文で聞いて、見つからなければ印刷する。それだけのことでは。 これに類することは質問者はやっているようだが。 === 違うなら、コードを作るうえでの、判らない課題を箇条書きにでもしたら。

関連するQ&A