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

CommandBarControlでメニューバーを作成し、イベントを実行していますが、何故か2回実行されてしまいます。
具体的には、
 Set myMenu = Application.CommandBars("Worksheet Menu Bar"). _
Controls.Add(Type:=msoControlPopup, before:=11)
With myMenu
.Caption = "User's MenuBar(xx)"
With .Controls.Add
.Caption = "フォームを開く"
.OnAction = "OpenForm(2)"
End With

上記で「フォームを開く」メニューバーを作成して、これを選択すると、UserForm1.Show というロジックが書かれているSubプロシジャーが実行されます。
これにより、フォームが開くのですが、どうもこのプロシジャーが2回実行されており、フォームが2つ開いているのです。
しかし、原因がわかりません。

対策としては、
1.2回実行される原因を調べる。
2.UserForm1が既に開いていたら開かないようにロジックを変更す   る。
1は皆無ですし、2はUserForm1が既に開いているかをチェックするロジックが分かりません。
どなたか教えて下さい。
よろしくお願いします m(_ _)m

A 回答 (2件)

>何故か2回実行されてしまいます。


引数を ( ) 付きで渡してるからですね。

OnActionプロパティに引数付きマクロ名を設定する時はシングルクォーテーションで囲みます。
.OnAction = "'OpenForm 2'"



他に、ParameterプロパティやTagプロパティを使ったりする方法もあります。

With .Controls.Add
  .Caption = "フォームを開く1"
  .OnAction = "test"
  .Parameter = 1
End With
With .Controls.Add
  .Caption = "フォームを開く2"
  .OnAction = "test"
  .Parameter = 2
End With


Sub test()
  Dim i As Long
  
  i = Application.CommandBars.ActionControl.Parameter
  MsgBox i
  UserForm1.Show 0
End Sub

#http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr; …
    • good
    • 2
この回答へのお礼

end-uさん:
どうもありがとうございました。
引数を ( ) 付きで渡してはダメなんて初めて知りました。
勉強不足でした。
即直したところバッチリでした。m(_ _)m

お礼日時:2009/10/29 09:10

>1は皆無ですし



デバッグモードでトレースして、わからないのかな?

>2はUserForm1が既に開いているかをチェックするロジックが分かりません。

意味無いでしょ?
バグってるんですよ?
あなたのプログラムは…

小手先のコーディングで回避するのは???です
    • good
    • 0

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

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