いつもお世話になっています。
VBAでフォームに配置した20個程度のコントロール(ラベル)をユーザーが自由に変更するにはどのようなプログラムを書けばよいのかわかりません。
配置は、エディタで固定して使わせるのではなく、ユーザーがフォーム上で自由にコンロトロールの配置を行ってレイアウトできるようにしたのですが、適当なイベントドリブンが見つかりません。
マウスダウンやマウスムーブなどのイベントを組み合わせることでできそうな気もするのですが1週間ほど悩んでも名案がうかびません。
目指すのは、「レイアウト変更」ボタンを押すと、変更モードになって、コントロールをドラッグしながら好きな位置へもっていけるというものです。
よろしくお願いします。
No.1
- 回答日時:
基本的には、オブジェクトのそれぞれの「Top」「Left」「Height」「Width」プロパティを数値指定することになります。
標準ではGUI(グラフィカルユーザインターフェース)は用意されていません。自分で作るか、そういうアドインを購入するかになります(販売しているかはわかりませんが…)。ご教示ありがとうございました。コントロールのサイズは変更なしでフォーム上に位置のみ変更したいと思っています。「Top」「Left」を変更することはわかっているのですが、新しい場所へ
ドラッグさせたいので、その際のイベントを発見したいと思っています。
No.2
- 回答日時:
流れとしては
------------------------------------------------------
「UserForm_MouseDown」でポインターの所にあるオブジェクトを選択する。
「UserForm_MouseMove」でポインターの動きに合わせオブジェクトを移動する。
「UserForm_MouseUp」でオブジェクトを固定する。
------------------------------------------------------
ポインターの所にあるオブジェクトを調べたり、はみ出た時の処理とか結構面倒だと思います。
No.3
- 回答日時:
すみません。
チョット動かしてみたらオブジェクト上だとUserFormのイベントは発生しませんね。「CommandButton1」がイベント対象とした場合
------------------------------------------------------
「CommandButton1_MouseDown」でポインターの所にあるオブジェクトの「Top」と「Left」を得る。
「CommandButton1_MouseMove」でポインターの動きに合わせオブジェクトの「Top」と「Left」変更する。
------------------------------------------------------
という動きになるんですが、オブジェクトの位置を動かすと相対的に「X」「Y」が動いてしまうのでイベントを止めないといけませんが、イベントを止めているときに動いた分は考慮しないといけないので訳が分からなくなりますね。
No.4ベストアンサー
- 回答日時:
どこかで見たような・・・。
hatena師匠のサイトでした。
http://hatenachips.blog34.fc2.com/blog-entry-159 …
実装したことはありませんが参考になるかと思います。
nicotinismさん。ありがとうございました。そのものズバリです。
エクセルで使用したかったので多少修正しました。載せておきます。
Option Explicit
Dim CX As Long
Dim CY As Long
Dim EFFECT As Boolean
'フォームを開くとき
Private Sub UserForm_Initialize()
EFFECT = False 'マウスボタン移動時イベント無効
End Sub
'マウスボタン移動時
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
On Error Resume Next
If EFFECT = True Then
Me.Label1.Left = Me.Label1.Left + X - CX
Me.Label1.Top = Me.Label1.Top + Y - CY
End If
End Sub
'マウスボタン解放時
Private Sub Label1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button > 0 Then 'ドラッグ終了
EFFECT = False 'マウスボタン移動時イベントを無効にする
End If
End Sub
'マウスボタンクリック時
Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button > 0 Then 'ドラッグ開始
EFFECT = True 'マウスボタン移動時イベントを有効にする
CX = X
CY = Y
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 画面上のカーソルに文字数字を入力するコードを教えて下さい 1 2022/10/30 10:31
- Access(アクセス) マイクロソフト アクセス2021のフォームビュー作成でレイアウトを帳票形式から単票形式にあとから変更 1 2023/03/03 10:56
- Word(ワード) Word文書のドラッグ操作による配置調整。 1 2022/10/16 19:24
- Word(ワード) 表の縦罫線を移動するピッチ 1 2022/10/12 12:24
- 郵便・宅配 皆さんは宅配の置き配には反対ですか?賛成ですか? 私は反対です。郵便配達をやっていました。配達先の人 7 2023/04/22 00:13
- Excel(エクセル) コントロールにリンクするセルが選択されない 3 2022/06/12 14:37
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(パソコン・スマホ・電化製品) エクセルって頻繁にボタンのレイアウトが変わってやりにくいのですが、なぜバージョンが変わるとごっそり場 6 2023/08/21 22:33
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
ACCESSでタイトルバーを非表示にする方法
Access(アクセス)
-
Accessのレポート上のテキストボックス値を設定したい
その他(データベース)
-
-
4
フォームの高さを数値で指定したいのですが
Excel(エクセル)
-
5
ACCESSでデータ読み取り専用を解除する方法
その他(データベース)
-
6
Access・VBAで、Controlsを使用した条件式(書き方)
Access(アクセス)
-
7
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
8
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
9
Access サブフォームでの選択行の取得
その他(データベース)
-
10
どこにもフォーカスを当てたくない
Access(アクセス)
-
11
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
12
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
13
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
-
14
コンボボックスの先頭行に空白行を入れるには?
Excel(エクセル)
-
15
角丸四角形を描きたい
Excel(エクセル)
-
16
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
-
17
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
18
accessのレポートであとから他のテーブルのフィールドを追加する方法
Access(アクセス)
-
19
Accessのフォーム上にエクセルのシートを表示させたい!
Visual Basic(VBA)
-
20
Access VBA Me.Requery レコードは削除されています エラー
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
PowerpointVBAで指定のShapeオ...
-
Excelでの図形の描画
-
Excel VBAでマウスの左クリック...
-
アクセスで説明の欄の隠しオブ...
-
現在アクティブになっているオ...
-
VBでExcelの表形式の様なデザイ...
-
Imageコントロールにグラフを表...
-
日本語の文字化けを直す方法
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
Excelシート上のマクロを登録し...
-
EXCEL VBA マクロ 実行する度に...
-
switch の範囲指定
-
【Excel】特定の文字を含むセル...
-
CloseとDisposeの違い
-
VBAでループ内で使う変数名を可...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
Excel VBAでマウスの左クリック...
-
文字列で小数点以下の0を削除し...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
Excel2007 でのチェックボック...
-
Accessのフォーム上にエクセル...
-
日本語の文字化けを直す方法
-
エクセルのデータをwebフォーム...
-
現在アクティブになっているオ...
-
PowerpointVBAで指定のShapeオ...
-
コードでオブジェクトを最前面に
-
【エクセル】複数のTextBoxに共...
-
Imageコントロールにグラフを表...
-
ユーザーフォームのインポート...
-
Access からオブジェクトとして...
-
構造体の静的な初期化
-
Excel VBA でPictureBoxオブジ...
-
「SHDocVw」の意味
おすすめ情報