• ベストアンサー

エクセル:ユーザーフォームにコマンドボタンの設置

エクセルVBAで、ユーザーフォームを利用していますが、そのユーザーフォーム内にエクセルに最初から備わっているツールバーのコマンドボタンを貼り付けることは出来るのでしょうか? というのも、図形をマウスで範囲選択して、選択された図形をDELETEで全部削除するマクロを組もうと思っているのです。 が、図形描画のツールバーに範囲選択をすると、その範囲内にある図形を全部選択できるコマンドボタンがあったので、その機能をそのままユーザーフォームに設置できればOKと思ったのですが・・・。 それと同様のことが出来るマクロを組めれば問題なのかもしれませんが、私にはちょっと無理そうです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 こんな風にしたらどうですか? オブジェクトの選択ボタンのIDは、182 ですから、FindControl で探して、設定し、 凹んだ状態を、○で表示。そのまま、オートシェイプ類を選択し、コントロールキーを押しながら、コマンドボタンを押すと、オートシェイプ類を削除。 UserForm が小さいほうがやりやすいようですね。なお、UserForm の プロパティの ShowModal は、False ですから、忘れないようにしてください。 Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)   With Application.CommandBars.FindControl(, 182)    If Shift = 0 Then      If .State = msoButtonUp Then       .Execute       Me.CommandButton1.Caption = "○" '選択可      Else       .Execute       Me.CommandButton1.Caption = "●" '選択不可      End If    ElseIf Shift = 2 Then 'コントロールを押しながら      If TypeName(Selection) = "DrawingObjects" Then       Selection.Delete      End If    End If   End With End Sub

char_cat
質問者

お礼

完璧です。確かに出来ました。本当にありがとうございます。FindControlというやり方があるのは始めて知りました。これならいろいろと出来そうです。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#2 のWend02です。 追伸: 忘れていたけれども、必ず、以下のコードを入れて、ボタンを戻しておいてくださいね。ツールバーを出していませんから、ボタンが見えない状態で、そのままにすると、何が起こったか分らず、Excelのトラブルのようになりますから。(^^; Private Sub UserForm_Terminate() With Application.CommandBars.FindControl(, 182)   If .State = msoButtonDown Then    .Execute   End If End With End Sub

char_cat
質問者

お礼

確かに、こういったフォローをしておかないと初心者の多い職場では、トラブルになりますね。重ねてありがとうございます。

  • te12889
  • ベストアンサー率36% (715/1959)
回答No.3

#1です。 ご質問を誤解し、失礼いたしました。 ど素人の私といたしましては、ユーザーフォームではなくて、新規ツールバーにマクロのボタンを乗せるという方法ぐらいしか思い浮かびません。(ツールバーなら、既存のコマンドボタンは乗せられますので・・・) 私の知識が及ばない世界でございますので、これにて撤退させていただきます。申し訳ありませんでした。

char_cat
質問者

お礼

そうですね。確かに、マクロをツールバーに登録するという逆転の発想もありました。この方法も今後使ってみたいと思います。ありがとうございました。

  • te12889
  • ベストアンサー率36% (715/1959)
回答No.1

範囲選択で図形が選択状態になったら、「Del」キーで一発削除できますので、そこからマクロを起動させる必要はないと思いますが・・・。

char_cat
質問者

補足

早々の回答ありがとうございます。 実は、社内のパソコン初心者にも簡単に使えるように、様々な機能をユーザーフォームに集約させたいと考えています。 当然、コマンドボタンでマクロを実行させるものも数多く使っていますが、質問したように「範囲選択のボタンそのものをユーザーフォームに設置できないか?」と考えているのです。

関連するQ&A