[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vba ボタン分岐処理のF8確認方法 』(お盆)
お世話になります。 押したボタンによって分岐処理しています。 下記のコードで動くのですが これをF8で一行ずつ確認していくと ↓で「実行時エラー」となります。 Button_Name = Application.Caller '押されたボタンを判定
このエラーを回避してF8確認を続けるにはどうすればいいのでしょう?
Sub ボタン名分岐1()
Dim Button_Name As String
Range("G1:G10").Select
Selection.Clear
Button_Name = Application.Caller '押されたボタンを判定
If Button_Name = "図1" Then
MsgBox "ボタン 1が押されました。"
Range("F2:F3").Select
Selection.Copy
Range("G2").PasteSpecial xlPasteValues
ElseIf Button_Name = "図2" Then
MsgBox "ボタン 2が押されました。"
Range("F5:F7").Select
Selection.Copy
Range("G5").PasteSpecial xlPasteValues
ElseIf Button_Name = "図3" Then
MsgBox "ボタン 3が押されました。"
Range("F9:F10").Select
Selection.Copy
Range("G9").PasteSpecial xlPasteValues
End If
Application.CutCopyMode = False
Range("F1").Select
End Sub
< 使用 Excel:Excel2019、使用 OS:Windows10 >
Stop
MsgBox TypeName(Application.Caller)
(隠居Z) 2022/08/16(火) 08:37
vbaエディタの左の灰色の枠の部分をクリックすると 茶色の線?とか引かれませんか? そこがブレークポイントになりマクロが実行されれば そこで止まります。 後は、F8キーで進む。 (これ設定とかが必要なのか覚えてない) (プレビュー) 2022/08/16(火) 09:31
(お盆) 2022/08/16(火) 09:46
■1
VBAの世界では基本的にシートやセル(オブジェクトと言います)を明示すればいちいちアクティブにしたり選択したりする必要はありません。
また、標準モジュールでシートの指定を省略した場合ActiveSheetが指定されたものみなされるルールです。
したがって対象のオブジェクトを明示するようにされたほうがよいとおもいます。
■2
一見するとインデントが付いているように見えますがちょっと変な感じもします。
最終的にはご本人の判断というか好みになるでしょうが、余裕があれば再考されてはどうでしょうか?
■3
>F8で一行ずつ確認していくと
既にあるように、エディタから直接ステップ実行するのではなく、一旦ブレークポイントを設定してボタンを押した後、そこからステップ実行すればよいですね。
■4
余談になりますが↓だとすれば、以下のようなアプローチでもOKだとおもいます。
誤 Range("F5:F7").Select
正 Range("F5:F6").Select
Sub ボタン名分岐1()
Dim Button_Name As String
Dim 行 As Long
Stop 'ブレークポイントの代わり
With ActiveSheet
.Range("G1:G10").Clear
Select Case Application.Calle
Case "図1"
Button_Name = "ボタン 1"
行 = 2
Case "図2"
Button_Name = "ボタン 2"
行 = 5
Case "図3"
Button_Name = "ボタン 3"
行 = 9
Case Else
MsgBox "想定以外のボタンが押されました" & vbLf & "処理を中止します"
Exit Sub
End Select
MsgBox Button_Name & "が押されました。"
.Cells(行, "F").Resize(2).Copy
.Cells(行, "G").PasteSpecial xlPasteValues
Application.CutCopyMode = False
.Range("F1").Select
End With
End Sub
さらにセル範囲は間違っていない(必ずしも2行ではない)ということであれば↓のような方法もありますね。
Sub ボタン名分岐1()
Dim Button_Name As String
Dim セル範囲 As String
Stop 'ブレークポイントの代わり
With ActiveSheet
.Range("G1:G10").Clear
Select Case Application.Calle
Case "図1"
Button_Name = "ボタン 1"
セル範囲 = "F2:F3"
Case "図2"
Button_Name = "ボタン 2"
セル範囲 = "F5:F7"
Case "図3"
Button_Name = "ボタン 3"
セル範囲 = "F9:F10"
Case Else
MsgBox "想定以外のボタンが押されました" & vbLf & "処理を中止します"
Exit Sub
End Select
MsgBox Button_Name & "が押されました。"
With .Range(セル範囲)
.Copy
.Offset(, 1).PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
.Range("F1").Select
End With
End Sub
(もこな2) 2022/08/16(火) 20:29
(うるせー) 2022/08/16(火) 21:26
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.