[[20050428215554]] 『マクロで印刷』(ぷ〜) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロで印刷』(ぷ〜)

 応用ができないんです・・・

 Private Sub 印刷_Click()

Dim ws As Worksheet
Dim MyName As String, myNo As String
Dim i As Long

    MyName = ActiveSheet.Name
    i = InStrRev(MyName, "!")

        conf = MsgBox("印刷する(〃⌒o⌒)?", vbOKCancel, "印刷")
     If conf = vbOK Then

             conf = MsgBox("確認する(*^▽^*)o♪ ", vbOKCancel, "確認")
          If conf = vbCancel Then
             conf = MsgBox("印刷します!", vbOKCancel, "確認")
          If conf = vbOK Then

          myNo = Mid(MyName, i)

            If InStr(ws.Name, myNo) > 0 Then
              ws.PrintOut

         ElseIf conf = vbOK Then

              myNo = Mid(MyName, i)

           For Each ws In Worksheets
            If InStr(ws.Name, myNo) > 0 Then
              ws.PrintPreview

         End If

      Next ws

             conf = MsgBox("いいかなv(=∩_∩=)v", vbOKCancel, "印刷")
         If conf = vbOK Then

                  myNo = Mid(MyName, i)

         For Each ws In Worksheets
            If InStr(ws.Name, myNo) > 0 Then
              ws.PrintOut

            ElseIf conf = vbCancel Then

         End If

      Next ws
 上記の様なマクロを作成して見ましたが上手くいきません!
 印刷する?でOKなら確認する?と表示されてCancelを選択したら,
 そのまま印刷する所までは,上手くいくのですが・・・
 確認をするでOKを選択したら,印刷プレビューが表示されて,いいかなとMsgが
 表示され、印刷としたいのですが,どうしたら良いですか????  


 頭をそろえると、何処と何処が対応しているのかが分かりやすくなります。

    MyName = ActiveSheet.Name
    i = InStrRev(MyName, "!")
    conf = MsgBox("印刷する(〃⌒o⌒)?", vbOKCancel, "印刷")
    If conf = vbOK Then
        conf = MsgBox("確認する(*^▽^*)o♪ ", vbOKCancel, "確認")
        If conf = vbCancel Then
            conf = MsgBox("印刷します!", vbOKCancel, "確認")
            If conf = vbOK Then
                myNo = Mid(MyName, i)
                If InStr(ws.Name, myNo) > 0 Then
                    ws.PrintOut
                ElseIf conf = vbOK Then
                    myNo = Mid(MyName, i)
                    For Each ws In Worksheets
                        If InStr(ws.Name, myNo) > 0 Then
                            ws.PrintPreview
                        End If
                    Next ws
                    conf = MsgBox("いいかなv(=∩_∩=)v", vbOKCancel, "印刷")
                    If conf = vbOK Then
                        myNo = Mid(MyName, i)
                        For Each ws In Worksheets
                            If InStr(ws.Name, myNo) > 0 Then
                                ws.PrintOut
                            ElseIf conf = vbCancel Then

                            End If
                        Next ws

 今現在はこんな感じです。
途中までしか書いてませんか?

 追記:ライブラリより
(e1pw)VBA字下げとIF文Win
VBAを読みやすくする記述法と基本的なIFの使い方を解説します。
http://www.excel.studio-kazu.jp/lib/e1pw/e1pw.html
(ご近所PG)


 今は,確認するで
 If conf = vbCancel Then
            conf = MsgBox("印刷します!", vbOKCancel, "確認")
            If conf = vbOK Then
                myNo = Mid(MyName, i)
                If InStr(ws.Name, myNo) > 0 Then
                    ws.PrintOut
 までは作動しますが,その下からの
 ElseIf conf = vbOK Then
        myNo = Mid(MyName, i)
     For Each ws In Worksheets
     If InStr(ws.Name, myNo) > 0 Then
         ws.PrintPreview
   End If
 Next ws

     conf = MsgBox("いいかなv(=∩_∩=)v", vbOKCancel, "印刷")
  If conf = vbOK Then
     myNo = Mid(MyName, i)
    For Each ws In Worksheets
  If InStr(ws.Name, myNo) > 0 Then
     ws.PrintOut

    ElseIf conf = vbCancel Then

  End If
 Next ws

 が,反応しないのです。


 頭を揃えれば動作するのではなくて、
記述内容を分かりやすくするために頭を揃えるのです。
ここの理解は問題ありませんか?

 いくら
 
If A Then
    処理A
    If B1 Then
        処理B1
ElseIf B2 Then
    処理B2

 と書こうが、
ElseIf B2 Then
が
If A Then
に対応するわけではありません。
そういう勘違いをなくす為に「頭を揃えましょう」と一般に推奨されているのです。

 私が先に上げた文は、ぷ〜さんの記述で今、どのIfがどのElseと対になっているかを示した物です。
ぷ〜さんが期待する位置とは違っているのではないでしょうか。
期待通りに揃えるなら、適切にEnd Ifを入れていく必要があります。
 
If A Then
    処理A
    If B1 Then
        処理B1
    End If
ElseIf B2 Then
    処理B2
End If
(ご近所PG)


 出来ました!!有難う御座いました!!

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.