電子書籍の厳選無料作品が豊富!

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/21 14:05

質問文が長いが、何をしたいのか文章で明確にならないのですか。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!