[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『(マクロ) 右クリックメニューとリスト表示について』(マイン)
お世話になっております。
シートのセルに右クリックメニューにリストを表示させ選択値をセルに転記させるコードを作成しております。
(質問)
・質問は
「任意のSheet名に対してのみ」動作するようにしたいと考えております。
・任意のシート名は
数値の「1〜31」となります。
(右クリックメニューを表示させるコード)
Private Sub myExl2_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("h20:h24,o20:o24,v20:v24,p27:p32,v27:v32")) Is Nothing Then Exit Sub Dim myBar2 As CommandBar Dim myList2 As Variant Dim V2 As Variant '本来の右クリックを表示しない Cancel = True '設定するリストのデータ myList2 = Array("(男)", "(女)") '一時的にポップアップを作成 Set myBar2 = Application.CommandBars.Add _ (Name:="Temp", Position:=msoBarPopup, Temporary:=True) 'リストの設定 For Each V2 In myList2 With myBar2.Controls.Add(Type:=msoControlButton, Temporary:=True) .Caption = V2 .OnAction = "選択" 'myProjectName & ".ThisWorkbook.選択" End With Next 'リスト表示 myBar2.ShowPopup '後始末 myBar2.Delete Set myBar2 = Nothing End Sub
何卒アドバイスの程よろしくおねがいします。
< 使用 Excel:Excel2010、使用 OS:Windows10 >
(マナ) 2019/03/17(日) 16:57
下記のようにしてみました。
・アクティブシート名がまず、数値かどうかを判定します。
・数値であれば更に「1〜31」であるかを判定します。
・一致したら右クリクメニューを表示するようにしてみました。
おかしいところがありましたら、アドバイスの程よろしくおねがいします。
Private Sub myExl2_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim shName As String 'シート名取得 Dim shCode As Long 'シート名を数値として格納
'シート名格納
shName = ActiveSheet.Name
'★シート名が数値、数値以外を判定 If IsNumeric(shName) Then '数値の場合:シート名を Sh に格納 shCode = shName
'★更に、数値が指定Sheetかを判定 If shCode < 1 Or shCode > 31 Then Exit Sub'シート名が[1〜31]以外は終了 End If
'★指定Sheetの場合は以下の処理
'-(右クリックメニュ表示)---------------------------------------------------------
If Intersect(Target, Range("h20:h24,o20:o24,v20:v24,p27:p32,v27:v32")) Is Nothing Then Exit Sub
Dim myBar2 As CommandBar Dim myList2 As Variant Dim V2 As Variant '本来の右クリックを表示しない Cancel = True '設定するリストのデータ myList2 = Array("(男)", "(女)") '一時的にポップアップを作成 Set myBar2 = Application.CommandBars.Add _ (Name:="Temp", Position:=msoBarPopup, Temporary:=True) 'リストの設定 For Each V2 In myList2 With myBar2.Controls.Add(Type:=msoControlButton, Temporary:=True) .Caption = V2 .OnAction = "選択" 'myProjectName & ".ThisWorkbook.選択" End With Next 'リスト表示 myBar2.ShowPopup '後始末 myBar2.Delete Set myBar2 = Nothing '-----------------------------------------------------------
Else'数値以外の場合:終了 'MsgBox "数値でもなければ、指定Sheetでもない" End If
End Sub
(マイン) 2019/03/17(日) 20:04
せっかくなら、Shを使えばどうですか。
>Else'数値以外の場合:終了
最後にもってくる必要性ありますか?
わかりにくくないですか。
あと、シート名は、必ず整数ですか。
あくまで、わたしならですが…
Likeを使うと簡単です。こんな感じ。
If Not Sh.Name Like "[1-3][0-1]" Then If Not Sh.Name Like "[1-9]" Then Exit Sub End If End If
(マナ) 2019/03/17(日) 20:31
シートは、指定シートのみ整数で、他のシートは全て文字列のみとしています。
アドバイスのCodeですが試しました。
・シンプルでわかりやすく管理が楽です。
・挙動も分岐が少ないのでサクッと動いている印象です。
バッチリ動いています。
しばらくいじってみます。
(マイン) 2019/03/17(日) 21:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.