- ベストアンサー
エクセル:ユーザーフォームにコマンドボタンの設置
エクセルVBAで、ユーザーフォームを利用していますが、そのユーザーフォーム内にエクセルに最初から備わっているツールバーのコマンドボタンを貼り付けることは出来るのでしょうか? というのも、図形をマウスで範囲選択して、選択された図形をDELETEで全部削除するマクロを組もうと思っているのです。 が、図形描画のツールバーに範囲選択をすると、その範囲内にある図形を全部選択できるコマンドボタンがあったので、その機能をそのままユーザーフォームに設置できればOKと思ったのですが・・・。 それと同様のことが出来るマクロを組めれば問題なのかもしれませんが、私にはちょっと無理そうです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 こんな風にしたらどうですか? オブジェクトの選択ボタンの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
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
#2 のWend02です。 追伸: 忘れていたけれども、必ず、以下のコードを入れて、ボタンを戻しておいてくださいね。ツールバーを出していませんから、ボタンが見えない状態で、そのままにすると、何が起こったか分らず、Excelのトラブルのようになりますから。(^^; Private Sub UserForm_Terminate() With Application.CommandBars.FindControl(, 182) If .State = msoButtonDown Then .Execute End If End With End Sub
お礼
確かに、こういったフォローをしておかないと初心者の多い職場では、トラブルになりますね。重ねてありがとうございます。
- te12889
- ベストアンサー率36% (715/1959)
#1です。 ご質問を誤解し、失礼いたしました。 ど素人の私といたしましては、ユーザーフォームではなくて、新規ツールバーにマクロのボタンを乗せるという方法ぐらいしか思い浮かびません。(ツールバーなら、既存のコマンドボタンは乗せられますので・・・) 私の知識が及ばない世界でございますので、これにて撤退させていただきます。申し訳ありませんでした。
お礼
そうですね。確かに、マクロをツールバーに登録するという逆転の発想もありました。この方法も今後使ってみたいと思います。ありがとうございました。
- te12889
- ベストアンサー率36% (715/1959)
範囲選択で図形が選択状態になったら、「Del」キーで一発削除できますので、そこからマクロを起動させる必要はないと思いますが・・・。
補足
早々の回答ありがとうございます。 実は、社内のパソコン初心者にも簡単に使えるように、様々な機能をユーザーフォームに集約させたいと考えています。 当然、コマンドボタンでマクロを実行させるものも数多く使っていますが、質問したように「範囲選択のボタンそのものをユーザーフォームに設置できないか?」と考えているのです。
お礼
完璧です。確かに出来ました。本当にありがとうございます。FindControlというやり方があるのは始めて知りました。これならいろいろと出来そうです。