標記の件、御指導願います。

シート1:印刷設定(チェックボックスが印刷したいシート分あります)
シート2~34:チェックボックスがオンである表題のシートを選択し一括で印刷する。

を、VBAで作ってみましたが、エラー(インデックスが有効範囲にありません)が出てしまいます。

Sub CheckBoxPrint()

Dim ArrySheet() As String
Dim I As Long
Dim k As Long

k = 0

For I = 1 To 33

If ActiveSheet.OLEObjects("CheckBox" & I).Object.Value = True Then
ReDim Preserve ArrySheet(k)
ArrySheet(k) = ActiveSheet.DrawingObjects("CheckBox" & I).Object.Caption
k = k + 1
End If
Next I

ThisWorkbook.Worksheets(ArrySheet).PrintOut ←エラー(インデックスが有効範囲にありません)

Erase ArrySheet


End Sub
   
このエラーを回避する方法を御指導してください。
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

印刷 VBA」に関するQ&A: VBA印刷ページ設定

A 回答 (2件)

エラーが出たからとすぐWEBなんぞに質問してませんか。


まず下記のように(確認用・・・の個所)でもして、自分がプログラムで設定した内容を確かめるクセを付けること。
Sub CheckBoxPrint()
Dim ArrySheet() As String
Dim I As Long
Dim k As Long
k = 0
For I = 1 To Sheets.Count - 1

If ActiveSheet.OLEObjects("CheckBox" & I).Object.Value = True Then
ReDim Preserve ArrySheet(k)
ArrySheet(k) = ActiveSheet.DrawingObjects("CheckBox" & I).Object.Caption
k = k + 1
End If
Next I
For Each cc In ArrySheet '<----確認用に入れてみる。こういうことをすることがデバッグで大切
MsgBox cc
Next
ThisWorkbook.Worksheets(ArrySheet).PrintOut '←エラー(インデックスが有効範囲にありません)
Erase ArrySheet
End Sub
上記のMsgbox no表示が質問者の思っている表示(シート名のはずだが)と正しいですか。
私は不自然だがチェックボックスのCaptionをSheetXXにそれぞれ変えて実行して、印刷は行われた。
ーー
わたしのテスト
Sheet1-Sheet4のシートとあり。
Sheet1に3つチェックボックスを貼り付け。2つだけON
ChechBox1のCaption-->Sheet2
ChechBox2のCaption-->Sheet3
ChechBox3のCaption-->Sheet4
このステップが行われていないか、Sheet名と食い違うのでは。
    • good
    • 0
この回答へのお礼

imogasi様

ご回答ありがとうございました。
ご指摘の通り、シート名に誤記がありました。
確認不足でした。。
今後はデバックしていくスキルも勉強します。

お礼日時:2011/04/28 11:50

とりあえず見た感じの範囲には間違いはありませんので,各チェックボックスのCaptionに誤記が無いか,正しくシート名を記入できているか,念入りに再確認してください。

    • good
    • 0
この回答へのお礼

keithin様

ご回答ありがとうございました。
ご指摘の通り、シート名に誤記がありました。
確認不足でした。。

お礼日時:2011/04/28 11:48

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCELで複数のシートを同時に印刷範囲の設定する方法【EXCEL2000】

EXCEL2000を使っています。
複数のワークシート(全て同じ範囲)に印刷範囲を設定するにはワークシート毎に(ツール→印刷範囲→印刷範囲の設定)の操作をする方法しかないのでしょうか?
ワークシートをグループ化した状態にして行うと印刷範囲の設定メニューがグレーになって操作が出来ません。
どなかたお教え下さい。

Aベストアンサー

>複数のワークシート(全て同じ範囲)に印刷範囲を設定するには
>ワークシート毎に(ツール→印刷範囲→印刷範囲の設定)の操作をする方法しかないのでしょうか?
結論としてはyesです。

一旦、該当の全シートを選択して[作業グループ]としてから印刷範囲に設定したい範囲を『選択』します。
(これで全シートの選択範囲が同じアドレスになります)
[作業グループ]を解除して、各シート表示させながら[印刷範囲の設定]をします。
ツールバーのユーザー設定で、[印刷範囲の設定]のアイコンがありますから、
これを追加で表示させておけば1クリックです。

それでも面倒な場合はマクロになります。
設定したいシートを選択して

Sub try()
  Dim ws As Worksheet

  For Each ws In ActiveWindow.SelectedSheets
    Sheets(1).Select
    ws.PageSetup.PrintArea = "$A$1:$B$2"
  Next
End Sub

こんな感じ。

Book内の全シートでよければもうちょっと簡単です。
Sub try2()
  Dim ws As Worksheet
  
  For Each ws In Worksheets
    ws.PageSetup.PrintArea = "$A$1:$B$2"
  Next
End Sub

>複数のワークシート(全て同じ範囲)に印刷範囲を設定するには
>ワークシート毎に(ツール→印刷範囲→印刷範囲の設定)の操作をする方法しかないのでしょうか?
結論としてはyesです。

一旦、該当の全シートを選択して[作業グループ]としてから印刷範囲に設定したい範囲を『選択』します。
(これで全シートの選択範囲が同じアドレスになります)
[作業グループ]を解除して、各シート表示させながら[印刷範囲の設定]をします。
ツールバーのユーザー設定で、[印刷範囲の設定]のアイコンがありますから、
...続きを読む

Q複数ファイルにある特定のシートを一度に印刷したい

エクセルファイルが100あります。
全ファイルにはシートが4あります。
全ファイルのシート2だけを印刷とか
全ファイルのシート4だけ印刷というのは可能でしょうか。

Aベストアンサー

マクロを用いれば可能です。例えば以下のようなマクロになります。
このマクロは2行目で指定したフォルダにある全てのブックの、3行目で指定したシート名のシートを印刷します。(マクロを登録したブックを除く)

動かしてみて「シート名を入力して指定したい」とか「どのファイルのシートか分かるようにしたい」などの要望が出てくるでしょうが、それはご自身でVBAを勉強して追加してください。(そこまではお手伝いでしません)

マクロはALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。

Sub Macro()
Const Fol As String = "Z:\Folder1"
Const Trg As String = "Sheet1"
Dim sh As Worksheet
Dim Fl, myBook, svFl As String
 myBook = ActiveWorkbook.Name
 ChDir (Fol)
 Fl = Dir("*.xls")
 Do While Fl <> svFl
  svFl = Fl
  If Fl <> myBook Then
   Workbooks.Open Filename:=Fl
   For Each sh In ActiveWorkbook.Worksheets
    If sh.Name = Trg Then
     sh.PrintOut
     Exit For
    End If
   Next sh
   ActiveWorkbook.Close
   Fl = Dir
  End If
 Loop
End Sub

マクロを用いれば可能です。例えば以下のようなマクロになります。
このマクロは2行目で指定したフォルダにある全てのブックの、3行目で指定したシート名のシートを印刷します。(マクロを登録したブックを除く)

動かしてみて「シート名を入力して指定したい」とか「どのファイルのシートか分かるようにしたい」などの要望が出てくるでしょうが、それはご自身でVBAを勉強して追加してください。(そこまではお手伝いでしません)

マクロはALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリ...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Q条件によって印刷するシートを変える方法 EXCEL-VBA

エクセル2003を使用してます。
VBAで可能かどうか質問します。

以下の4つのシートがあります。
「データ」、「東京」「大阪」「福岡」

シート名「データ」のセル「A1」に入力された文字により、入力された
文字に対応するシートをマクロを使用して印刷できるようにしたいと思ってます。

例えば、シート名「データ」のセル「A1」に「東京」と入力してマクロを実行すると
別シートの「東京」というシートが印刷され、同様にA1に「大阪」と入力して実行
すると、シート名「大阪」が印刷されるようにしたいと思ってます。

マクロを実行して、今回の例にあった、それぞれの条件に対応したシートを印刷
する方法をご教示お願いします。

Aベストアンサー

Sub Macro1()

Dim a As String
a = Sheets("データ").Range("A1").Value
Sheets(a).PrintOut

End Sub


ページ範囲を限定したい場合は引数Fromに開始ページ、引数Toに終了ページを指定します。
Sheets(a).PrintOut From:=1, To:=3

さらに一度プレビューを表示してから印刷したい場合は引数Previewを追加します。
Sheets(a).PrintOut From:=1, To:=3, Preview:=True

プレビューだけなら
Sheets(a).PrintOut Preview:=True

Qエクセル:VBAで特定のシートを選択し印刷

お世話になります。
エクセルの特定のシートを選択し印刷をかけるVBAを教えてください。
シートは[Paste_Up][…][Merge][GP****][GP****][GP****]・・・と続きます。このGPで始まるシート名を全て一括で印刷をかけたいのです。
GPの後に続く****は4桁の数字で当然全てユニークです。また、何枚出るかはその日によって違います。このGPで始まるシートは必ず[Merge]という名前のシートの後に来ます(設定を変えれば[Paste_Up]の前に全て持ってくることも可能です)。[Paste_Up]と[Merge]の間には何枚かシートが入ります。For…Nextでシート名が[Merge]になるまで等考えたのですが。。。
よろしくお願いいたします。

Aベストアンサー

簡単なサンプルを。。

'-------------------------------------------
Sub Test()
 Dim mySheet As Worksheet
 For Each mySheet In ActiveWorkbook.Worksheets
   If Left(mySheet.Name, 2) = "GP" Then
     mySheet.PrintOut
   End If
 Next mySheet
End Sub
'--------------------------------------------

見れば分かると思いますが、

全部のシート名を調べて、
シート名の頭2桁が、GP だったらプリントです。

以上。

QExcelでのVBA チェックボックスから印刷

初心者です。お世話になります。Excel2003を利用しています。
ユーザフォームに、CheckBoxを配置してあります。
CheckBoxを選択し、印刷ボタンを押したら印刷できるようにしたいのですが、CheckBoxを選択したらの部分が分かりません。
ここのHPにあるhttp://www.asahi-net.or.jp/~zn3y-ngi/YNxv98b2.html
のを参考にしています。
HPに書いてある、「Private Sub チェックボックスの選択結果を調べる()」をどう改造していいのか分かりません。
ご教授、よろしくお願い致します。

Aベストアンサー

こんばんは。

VBAを習い始めてから、どのぐらい経ちましたか?

私の経験からの想像ですが、たぶん、この規模のものを楽に作るには、丸2年ぐらい経験が必要だと思います。えっ!と、疑問に思われるかもしれませんが、サンプルのコードですと、数ヶ月レベルなのに、実務だと、それだけの経験が必要とは納得いかないかもしれませんね。

頭の中で、VBAの組み立てができていればよいのですが、なかなか、習っている状態では見えてこないのです。少し大きなものだとできません。

私が、今回と同等ののもので苦労したのは、VBAを始めて3年目で、掲示板でもほぼ解答できていたので、できるつもりになっていたのです。頼まれたものだったので、相手にお詫びした、苦い経験があります。

『かんたんプログラミング Excel2003 VBA 基礎編』技術評論社 (2004/02)
大村 あつし (著)
http://www.amazon.co.jp/exec/obidos/ASIN/4774119660

このシリーズ3部が全部読みきれている状態で、やっと、なんとか、VBAの入門が終わったレベルだと思ってよいようです。(一回目の読みきりが、6ヶ月ぐらいです。半分ぐらいしか理解できません。しかし、VBAの教本というのは、なぜか、詳しいことを書いていないのです。困ったものですね。詳しいものは、みんな絶版になってしまいました。)

たぶん、今回は、印刷設定の問題だとは思いますが、最初の印刷設定の(VBAとは関係のない)部分で通じていないので、前の方も分からないということだったと思います。

サンプルを示しておきます。こういうのは、教わらないとできるようになりません。みなさん、同じだと思います。

チェックボックスが、12個
コマンドボタン、1個

なお、Worksheets("SSS").Select を、UserForm_Intialize() の中に入れておくと良いです。
今回は、印刷範囲だけが、メッセージボックスで出てくるだけです。

UserFormモジュール
'--------------------------
Private Sub CommandButton1_Click()
  Dim i As Integer
  Dim j As Integer
  Dim ar(11) As Variant
  For i = 1 To 12
    ar(i - 1) = Me.Controls("CheckBox" & i).Value
  Next i
  For j = 0 To 11
   If ar(j) Then
     With ActiveSheet
      .PageSetup.PrintArea = Cells(100 * j + 1, 1).Resize(100).Address
      MsgBox Cells(100 * j + 1, 1).Resize(100).Address '検査用
      '.PrintPreview 'プリント・ブレビュー
     End With
   End If
  Next j
  'チェックボックスを全てオフにする
  For i = 1 To 12
    Me.Controls("CheckBox" & i).Value = False
  Next i
End Sub

こんばんは。

VBAを習い始めてから、どのぐらい経ちましたか?

私の経験からの想像ですが、たぶん、この規模のものを楽に作るには、丸2年ぐらい経験が必要だと思います。えっ!と、疑問に思われるかもしれませんが、サンプルのコードですと、数ヶ月レベルなのに、実務だと、それだけの経験が必要とは納得いかないかもしれませんね。

頭の中で、VBAの組み立てができていればよいのですが、なかなか、習っている状態では見えてこないのです。少し大きなものだとできません。

私が、今回と同等ののもので...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QエクセルVBA 別シートの複数のセルの値をコピーする方法

いつもお世話になります。

Dim sh1, sh2 As Worksheet
Set sh1 = Worksheets("sheet1")
Set sh2 = Worksheets("sheet2")

sh1.Range("C6").Value = sh2.Range("F5").Value
として、1つのセルの値ならコピーできるのですが、
sh1.Range("C6:C10").Value = sh2.Range("F5;F9").Value
としても、セルの値を持ってくることができません。
どのように書けば良いのでしょうか?

ちなみに今は、
sh2.Range("F5:F9").Copy
sh1.Range("C5:C9").PasteSpecial Paste:=xlValues
としているのですが、上記だとセルを範囲指定してしまって作業が見えるのでカッコ悪いのです。

Aベストアンサー

7-samuraiの質問ですみません。
No5のimogasiさん、いつもお世話様です。

Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet2")
Set sh2 = Worksheets("sheet1")
sh1.Range("c1:c5").Value = sh2.Range("A1:A5").Value
End Sub

で、うまくいきますよ。
複数セルの場合Valueは省略できないようです。

Qエクセルマクロで印刷プリンタを指定する方法

表題のとおりなんですけと、エクセルのVBAでの印刷命令はできますが、複数あるプリンタから特定のプリンタを指定したいのですが、なにかいい方法ありませんか?

Aベストアンサー

印刷のポートがLPT1:(プリンタポート)ならば

例:プリンタ名 自分のプリンタ
Application.ActivePrinter = "自分のプリンタ on LPT1:" 'プリンタの指定
ActiveWindow.SelectedSheets.PrintOut '印刷

印刷ポートがLAN内のプリンタサーバーの場合

例1:プリンタ名 事務室プリンタ
Application.ActivePrinter = "事務室プリンタ on Ne01:"
ActiveWindow.SelectedSheets.PrintOut

例2:プリンタ名 会議室プリンタ
Application.ActivePrinter = "会議室プリンタ on Ne02:"
ActiveWindow.SelectedSheets.PrintOut

Ne01 Ne02はLANにより異なります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報