
度々お世話になっております。
基本的なことだとは思うのですが,うまく探せませんでしたので質問させてください。
現在,次のようなプログラムをVB6.pro環境で作っています。
・ボタン(command1)を押す→ボタンの色が赤に変わる
ソースは以下の通りです。
Private Sub Command1_Click()
Call ColorChange(Command1)
End Sub
Sub ColorChange(Obj As Object)
Obj.BackColor = vbRed
End Sub
以上のプログラムでは,サブルーチンを呼び出す際に
オブジェクト名(Command1)をダイレクトに入力していますが,
これを自動で入力する関数はありますでしょうか。
Form1ならば,Meのようなものです。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
s_husky です。
次は、Command1のCaptionを書き換えるコードです。
Option Explicit
Private Sub Command1_Click()
CaptionChange
End Sub
Private Sub CaptionChange()
On Error Resume Next
Me.Controls(Screen.ActiveControl.Name).Caption = "AAAAA"
MsgBox "Next"
Screen.ActiveControl.Caption = "bbbbb"
End Sub
なるほど!押された瞬間はアクティブなので,
Screen.ActiveControlなる関数を使えば特定できるのですね。
アクティブなものを指定できるので,SetFocusと一緒に使えば
色々な応用が利きそうです。
ご回答ありがとうございました。
ところで,もしお時間があればお答えいただきたいのですが,
Me.Controls(Screen.ActiveControl.Name)
と
Screen.ActiveControl
は,どのように違うのでしょうか。
後者のみでコードを書いた場合,あるいは前者のみで書いた場合
両方を試してみたのですが,見た目には同じ動きでした。
No.4
- 回答日時:
> 実は,複数のボタンで同じような動作をしたいのです。
ボタンをコントロール配列にしてしまえば、イベントは一つ書くだけです。
Private Sub Command1_Click(Index As Integer)
Me.Command1(Index).BackColor = vbRed
End Sub
ご回答ありがとうございます。
確かに,ボタンのみであればコントロール配列で解決できます。
ただ,サブルーチンを呼び出した元のオブジェクト名がわかれば,
コントロール配列にしていないオブジェクトにも応用できますし,
様々な利用の仕方ができると思ったので,質問させていただきました。
#3の方の方法で,ある程度は解決できるので,それでやってみます。
(ある程度と書いたのは,Timerなどバックグラウンドで動く
オブジェクトには,Screen.ActiveControlが使えないからです)
貴重なお時間をいただき,ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) VBAでWorkbook.addの使い方 3 2023/02/01 11:58
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
【OpenGL】オブジェクトを照ら...
-
エクセルVBA初心者です。オブジ...
-
VBAでフォームのコントロールの...
-
C#で画像をクリップボードへの...
-
エクセルVBAでセル番地を指定し...
-
Excelを閉じるときVBAプロジェ...
-
ExcelVBA 変数を使ってセルを...
-
【エクセル】複数のTextBoxに共...
-
アクセスVBAのMe!と[ ]
-
Excel 終了マクロ
-
VBAでwebへの書き込みって可能?
-
コードでオブジェクトを最前面に
-
構造体の静的な初期化
-
Accessのフォーム上にエクセル...
-
【エクセルのマクロ】クリップ...
-
日本語の文字化けを直す方法
-
C++Builder 6 でドラッグ&ドロ...
-
GDIオブジェクトが増える……
-
PowerpointVBAで指定のShapeオ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
エクセルVBAでセル番地を指定し...
-
【エクセルのマクロ】クリップ...
-
文字列で小数点以下の0を削除し...
-
Excel VBAでマウスの左クリック...
-
Excel2007 でのチェックボック...
-
Accessのフォーム上にエクセル...
-
現在アクティブになっているオ...
-
【エクセル】複数のTextBoxに共...
-
日本語の文字化けを直す方法
-
PowerpointVBAで指定のShapeオ...
-
VBでExcelの表形式の様なデザイ...
-
サブルーチンにオブジェクト名...
-
ユーザーフォームのインポート...
-
コードでオブジェクトを最前面に
-
GDIオブジェクトが増える……
-
エクセルのデータをwebフォーム...
-
ChexBox1等の「1」を変数にで...
-
Access からオブジェクトとして...
おすすめ情報