アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA初心者です。
自分なりに検索したり、本で調べたりしているんですが、なかなか参考になるものがなくてこまっています。
写真のコードにもありますが、

コマンドボタン日報をクリックしたら
BD9=空白だったら、メッセージボックス

Y13=空白、Y64=空白、BL13=空白じゃない
→2ページ目だけ印刷
Y13=空白、Y64=空白じゃない、BL13=空白じゃない
→2ページ〜3ページ印刷
Y13=空白じゃない、Y64=空白、BL13=空白じゃない
→1ページ〜2ページ印刷
Y13=空白じゃない、Y64=空白じゃない、BL13=空白じゃない
→1ページ〜3ページ印刷
といった感じにしたいのですが、なぜかメッセージは表示されない、インデックスが有効範囲にありません とでてしまいます。
わかる方、お力をかしてください。

「VBA印刷ページ設定」の質問画像

質問者からの補足コメント

  • いえ、sheet3にユーザーフォームの起動ボタンがあり、ユーザーフォームの中に印刷ボタンがあります。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/02/23 09:13
  • 文字数オーバーしてしまうんで、わけます。
    Private Sub cmd日報_Click()
    If Range("BD9").Value = "" Then
    MsgBox "未入力の為、印刷物がありません"
    Exit Sub
    End If
    If Range("Y13").Value = "" And Range("Y64").Value = "" And Range("BL13").Value <> "" Then
    Sheets("Sheet3").PrintOut From:=2, To:=2
    ElseIf Range("Y13").Value = "" And Range("Y64").Value <> "" And Range("BL13").Value <> "" Then

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/02/23 09:38
  • Sheets("Sheet3").PrintOut From:=2, To:=3
    ElseIf Range("Y13").Value <> "" And Range("Y64").Value = "" And Range("BL13").Value <> "" Then
    Sheets("Sheet3").PrintOut From:=1, To:=2
    ElseIf Range("Y13").Value <> "" And Range("Y64").Value <> "" And Range("BL13").Value <> "" Then
    Sheets("Sheet3").PrintOut From:=1, To:=3

    End If


    End Sub

      補足日時:2017/02/23 09:39

A 回答 (5件)

こんにちは。



>なぜかメッセージは表示されない、「インデックスが有効範囲にありません」 とでてしまいます。

この場合は、今の情報からは、この私には分からないです。

あえて、VBA初心者の方というわけで、お教えしますが、デバッグの基本的な手順のひとつで、

Private Sub cmd日報_Click() のところに、ブレイクポイントを置きます。
(画面の左端の縦帯の部分をマウスクリツクすれば、●が付きます)
ひとつ付けば、あとはステップマクロが使えます。

そこで、マクロが止まりますから、あとは、ファンクションキー[F8 ]を一つずつ押して、どこでエラーが発生するか、調べていただくしかないと思います。

>sheet3にユーザーフォームの起動ボタンがあり、ユーザーフォームの中に印刷ボタンがあります。

もう一つ基本的なことを言うと、Sheets("Sheet3")になっているところは、
ActiveSheet に置き換えてもよいのではないだろうか、と思います。
できれば、With ステートメントをつけて、以下のようにします。

With ActiveSheet
If .Range("BD9").Value = "" Then  
 MsgBox "未入力の為、印刷物がありません"
Exit Sub
End If
If .Range("Y13").Value = "" And .Range("Y64").Value = "" And     .Range("BL13").Value <> "" Then
  .PrintOut From:=2, To:=2
 ・
 ・
 ・
End With
(それぞれのオブジェクトの前には、コンマがつけてあります。)

もうひとつ、これは一般的には余計なことだと思われるでしょうけれども、全体から受ける印象として、抜けている部分があるようにお見受けしました。
それは、PrintArea (印刷範囲)のことです。必ず確保していればよいのですが、なくなっていることがあります。

If ActiveSheet.PageSetup.PrintArea = "" Then
  MsgBox "印刷範囲を設定してください"
  Exit Sub
End If

このようなエラーチェックや、違っていた場合には、再設定をさせるマクロをつけておくと失敗が少ないのです。
    • good
    • 2
この回答へのお礼

細かく教えていただいてありがとうございました!
教えていただいたコードを参考に、参照するセルを変えたり、プリントエリアを設定したら、動作しました。
ありがとうございました!

お礼日時:2017/02/25 05:22

もしかしたら Excel 2003 以前の物と Excel 2007 以降のものが両方インストールされている環境だったりしませんか?


その環境で WindowsUpdate を行ってしまうと Excel 2003 以前のものではシート上のコマンドボタンなどが無効になってしまうことがあるようです。追加も「オブジェクトを挿入できません。」とメッセージが出て出来なくなっています。
    • good
    • 1
この回答へのお礼

環境は大丈夫でした。
親身になって何度も回答いただいてありがとうございました。
No.5の方のやり方を参考に少しいじったら、動作しました。

お礼日時:2017/02/25 05:20

エラーはどの行で発生していますか?

    • good
    • 0

「コマンドボタン日報」ボタンがあるシートと、印刷対象の「Sheet3」が別のシートでは有りませんか?

この回答への補足あり
    • good
    • 0

画像じゃ分からん。


ソースが分かれば、すぐ分かると思う。
よくあるエラーなんで。
この回答への補足あり
    • good
    • 0

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