いつも楽しく勉強させていただいております。
Excelのユーザーフォームを使い始めたところです。
コントロールのプロパティの設定を細かいVBAで行いたいのですが、方法がわかりません。
たとえばラベルの位置をそろえたいので
黒いラベル2.Left = 黒いラベル1.Left
黒いラベル3.Left = 黒いラベル1.Left
といったコードを書いてUserForm_Initialize()で実行してみたのですが、フォームを閉じると元の値に戻っています。
どうすれば黒いラベル2と黒いラベル3の左端を黒いラベル1と同じにできますか。
No.4ベストアンサー
- 回答日時:
Set Ctrl = .Designer.Controls("黒いラベル1")
.Designer.Controls("黒いラベル2").Left = Ctrl.Left
.Designer.Controls("黒いラベル3").Left = Ctrl.Left
InitializeイベントはUserForm読み込み時に発生するもの。
UserFormを呼び出すから発生します。
書こうとしているのは
「UserFormの設計を管理するプログラムファイルを書き換えるプログラム」
です。
VBIDEに限った話ではありませんが
「設計」と「実行」を切り離して考えるようにしてください。
尚、コード全体の提示は無用に願います。
以上です。
No.3
- 回答日時:
こんにちは。
お邪魔します。「UserForm.Controlsの初期設定(プロパティ)を効率よく再設定したい」
ということなのだと理解しました。
ただ、
原題の「ユーザーフォームのプロパティをVBAで設定したい」
ということに関して、
「UserForm.Controlsの初期設定をVBAで再設定したい」
という意図でお訊きになっているのだとすると、
プログラムファイルを書き換えるプログラムという意味になってしまいますから、
公開の場で直接の回答を付けることは私の主義に反するので致しかねます。
あしからず。
タイトル通りのことがしたいならば
「vba vbide userform designer」
で検索してみてください。
内容的には初級者に薦めるものではありませんし、様々な制約もあります。
技術的に、応用できる範囲の限られた特殊なものですし、
むしろ上達を阻むような面もありますから、教えたくない意味もあります。
再度、「UserForm.Controlsの初期設定を効率よく再設定したい」
というニーズに応える機能がVBE(Visual Basic Editor)には幾つか用意されています。
手順1(UserForm.Controlsの選択)
UserFormのDesignerが表示されている状態で、
・方法1a
黒いラベル1を選択、
そのままCtrlキーを押しながら、黒いラベル2、黒いラベル3、を選択
・方法1b
黒いラベル1,黒いラベル2,黒いラベル3を覆う範囲をドラッグ
以上の手順により→ 黒いラベル1,黒いラベル2,黒いラベル3
が、同時に(複数)選択された状態であることを確認してください。
手順2(UserForm.ControlsのProperty設定)
・方法2a
F4キーを押し、表示されるプロパティウィンドウで
Leftの項目に設定したい値(つまり黒いラベル1.Leftの値)を記入
・方法2b
黒いラベル1が選択中であることを示すフレームの上をクリックして
選択中のControlsのうち黒いラベル1がアクティブな状態
(フレーム上の8方向を示すドットが白色)であることを確認してください。
黒いラベルの何れかを右クリック→整列→左
以上の手順により→ 黒いラベル1,黒いラベル2,黒いラベル3が整列されます。
他にも方法はありますし色々な教え方があるとは思いますが、
応用し易いように2*2例だけ挙げてみました。
VBEに備えられたその他の機能についても暇をみて調べて、習得しておくと
何かと効率よく作業できるようになるかと思います。
余談。UserFormの扱いに熟れてから、ですが、私の場合、
UserForm.Controlsのデザイン上のプロパティ設定は(#2のご回答主旨と同様)
_Initializeイベントに書いて済ますことが多いです。
初期設定をやり直すより早く、できますし
_Initializeイベントに書くことによって、処理の速さが
損なわれるというようなことを感じたことも無いからです。
Controlのオブジェクト名やIndexでループしたり、
Controls数の多少に係らず基本通りのことしかしませんけれども。
今回のご質問のような場合だと
Private Sub UserForm_Initialize()
Dim i As Long
For i = 2 To 3
Controls("黒いラベル" & i).Left = 黒いラベル1.Left
Next i
End Sub
↑のようなコードを用意して、
For Next ループのstart値end値を必要に応じて指定することで
用は足りてるようにも思えます。
ご検討してみてください。
以上です。
この回答への補足
回答ありがとうございます。
>「UserForm.Controlsの初期設定(プロパティ)を効率よく再設定したい」
まさにその通りです。
説明が足りませんでした。
足りないといえば環境を書くことも忘れていました。
Win7でExcel2010です。
実は私、軽い脳梗塞の後遺症でCtrlキーを押しながら複数のコントロールを選択といった作業が非常に苦手となりました。
一方キーボードを打つのはそんなに苦ではないのでできれば今回のような場合はプログラムで対処したいのです。
>「vba vbide userform designer」
検索して下記のようなコードを書いてみたのですが、VBIDE.VBComponentの参照設定をしないといけないようです。
ところが私のExcel2010では「Visual Basic For Applications Extensibility 」がありません。
どうすればいいですか。
Sub MyProc()
Dim Frm As VBIDE.VBComponent
Dim Ctrl As Control
Set Frm = ThisWorkbook.VBProject.VBComponents("UserForm1")
With Frm
Set Ctrl = .Designer.Controls("黒いラベル2")
Ctrl.Left = UserForm1!黒いラベル1.Left
Set Ctrl = .Designer.Controls("黒いラベル3")
Ctrl.Left = UserForm1!黒いラベル1.Left
End With
End Sub
本来はお礼を書く欄ですが、補足の訂正を。
Visual Basic For Applications Extensibilityがないと書きましたが、
Microsoft Visual Basic for Applications Extensibilityならありました。
これを参照設定して実行したところ、
Ctrl.Left = UserForm1!黒いラベル1.Left
のところでUserForm_Initialize()に制御がうつり、そこで異常終了してしまいます。
なんとかVBAでプロパティの設定をした結果をデザインモードでも残せるようにできませんか。
No.2
- 回答日時:
> UserForm_Initialize()で実行してみたのですが、
実行時には揃ってるんでしょ?
「ユーザーフォームのプロパティをVBAで設定したい」は達成できてるのでは?
> フォームを閉じると元の値に戻っています。
そりゃデザインモードだからでしょ?
Ctrlキー押下で複数のオブジェクトを選択できます。
複数選択した状態でleftプロパティを設定することも可能ですよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VB DataGridViewについて 3 2022/06/08 17:20
- 居酒屋・バル・バー 昼に居酒屋で定食を注文してサッポロ黒ラベル生ビール中を頼みました。 中なのにグラスで出てきてそれを飲 5 2023/08/15 18:02
- プリンタ・スキャナー Wordで作った宛名ラベルを印刷しようと思って、プリンターの上のところにある、手差しトレイ的なところ 3 2022/11/17 18:40
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- バッグ・財布 ルイ・ヴィトンのシリアルナンバーは、同じ種類のバックでラベルの色が2種類あるのですか。ちなみに1つは 2 2022/05/23 18:02
- CM エレカシ宮本浩次さん出演のビールのCMって、まだテレビで流れてますか? 妻夫木聡さんのサッポロ黒ラベ 1 2022/07/22 22:10
- お酒・アルコール スナックを経営しております。サッポロ黒ラベル、キリン1番絞り、アサヒスーバードライのどれかを無くすな 12 2022/07/02 19:14
- ホテル・旅館 リッツカールトン東京に行きました。ロビーラウンジでメニューを指さしながら「黒ラベル」を注文したところ 2 2023/03/13 10:58
- プリンタ・スキャナー プラザーのプリンター DCP-J926N-W/B を使用して 100均などで売られている マグネット 1 2022/12/01 14:40
- その他(買い物・ショッピング) 商品にラベルを貼って出荷するまでのの手順にについて 2 2022/09/29 15:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワードかエクセルで、KOKU...
-
エクセル宛名ラベルが重複する
-
ラベルの差込印刷で2ページ目以...
-
一点一葉とはどんな意味ですか?
-
インデックスに印刷する方法
-
Wordのラベル印刷で空データが...
-
CD-Rへのラベル貼付は大丈夫?
-
宛名ラベルの「〒」「様」表示...
-
A4を分割する方法
-
cldという拡張子って?
-
CDやDVDのラベルやジャケッ...
-
ワードで宛名ラベルのフォント...
-
wordでラベル差込印刷時に右端...
-
ラベルマイティのipad版教えて...
-
《Excel2000》散布図のデータラ...
-
エレコムの宛名ラベル全部の氏...
-
CSVデータをIllustratorに自...
-
CDやDVDの表面へのラベル...
-
ワードの宛名ラベル作成について
-
ピボットテーブルのΣ値のタイト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ワードかエクセルで、KOKU...
-
一点一葉とはどんな意味ですか?
-
エクセル宛名ラベルが重複する
-
インデックスに印刷する方法
-
ラベルの差込印刷で2ページ目以...
-
フラットファイルの背表紙部分...
-
エクセルでマイタックラベルへ...
-
ピボットテーブルのΣ値のタイト...
-
筆王
-
ワード差込印刷 縦書き・横書き...
-
DVDのタイトルを変更したい
-
ワード差し込み印刷:作成した...
-
Wordで作った宛名ラベルを印刷...
-
ワードで宛名ラベルのフォント...
-
CDやDVDの表面へのラベル...
-
Excel VBAのフォーム_ラベルの...
-
wordでラベル差込印刷時に右端...
-
ラベル印刷ソフトで連番を一度...
-
宛名ラベル 2枚目以降が表示、...
-
ラベル屋さんでひとつひとつの...
おすすめ情報