PowerPointのVBAでユーザーフォームを作成しています。
そこで以下のようなプログラムを作成しています。
①フォーム内のコマンドボタンをクリックすると新たなコマンドボタンを作成
②その新たなコマンドボタンをマウスをドラッグさせることでフォーム内を移動、また拡大縮小可能にしたい
①はサイトを見ながら自力でできそうなのですが②をどのように実現させればよいか悩んでいるところです。
ぜひご回答よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/19 05:04
回答2件
0
ベストアンサー
コントロールを移動させる方法は、sousukeさんの回答でいいと思いますが、動的に生成されたコントロールにイベントを割り当てるには、クラスモジュールが必用になります。下記が参考になるかな。
VBA。フォームにコントロールを動的に追加する - Qiita
下記はAccessのフォームなので、PowerPointのユーザーフォームとは若干異なりますが、移動できるコントロールのクラスモジュールのコード例です。
ドラッグできるラベルのクラス化 - hatena chips
追記:
下記の方が今回のものに近いかも。Excel ですが、基本的には同じでしょう。
ユーザーフォームに動的にボタン等を追加する - Excelが大好きだ!
追記2:
作成してみました。
VBAウィンドウで、[挿入]-[クラスモジュール]で下記のコードを記述。
オブジェクト名を DragableButton とする。
VBA
1Option Explicit 2Private mx As Long, my As Long 3Private IsClick As Boolean 4Private WithEvents mBtn As MSForms.CommandButton 5 6Public Sub Bind(objBtn As CommandButton) 7 Set mBtn = objBtn 8End Sub 9 10Private Sub mbtn_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 11 If Button = 1 Then '左ボタンが押されたらドラッグ開始 12 mx = X 13 my = Y 14 IsClick = True 15 End If 16End Sub 17 18Private Sub mbtn_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 19 If IsClick = True Then 20 mBtn.Left = mBtn.Left - (mx - X) 21 mBtn.Top = mBtn.Top - (my - Y) 22 End If 23End Sub 24 25Private Sub mbtn_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 26 If Button = 1 Then '左ボタンが開放されたらドラッグ終了 27 IsClick = False 28 mx = 0 29 my = 0 30 End If 31End Sub
ユーザーフォームにコマンドボタンを配置して、オブジェクト名は cmdMakeBtn
とする。
ユーザーフォームのモジュール
VBA
1Option Explicit 2Dim dBtnCol As Collection 3Dim dBtn As DragableButton 4 5Private Sub cmdMakeBtn_Click() 6 Dim mCmdBtn As MSForms.CommandButton 7 Set mCmdBtn = UserForm1.Controls.Add("Forms.CommandButton.1", _ 8 "CommandButton" & dBtnCol.Count + 1, True) 9 With mCmdBtn 10 .Left = 10 11 .Top = 10 12 .Width = 150 13 .Caption = .Name 14 End With 15 Set dBtn = New DragableButton 16 dBtn.Bind mCmdBtn '生成したボタンをDragableButtonクラスに接続 17 dBtnCol.Add dBtn 18End Sub 19 20Private Sub UserForm_Initialize() 21 Set dBtnCol = New Collection 22End Sub
投稿2018/01/19 08:43
編集2018/01/19 13:40総合スコア33620
0
移動は結構簡単ですよ。拡大縮小は応用してください。
vba
1Private mx As Single 2Private my As Single 3Private IsClick As Boolean 4 5Private Sub btn0_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 6 mx = X 7 my = Y 8 IsClick = True 9End Sub 10 11Private Sub btn0_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 12 If IsClick = True Then 13 Me.btn0.Left = btn0.Left - (mx - X) 14 btn0.Top = btn0.Top - (my - Y) 15 End If 16End Sub 17 18Private Sub btn0_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 19 IsClick = False 20 mx = 0 21 my = 0 22End Sub 23
投稿2018/01/18 13:55
総合スコア3828
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/19 04:43
2018/01/19 08:53
2018/01/20 10:20
2019/02/14 03:07
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。