Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9109 / 13646 ツリー ←次へ | 前へ→

【29291】ユーザーフォームのコントロール 年寄り 05/9/29(木) 20:47 質問[未読]
【29295】Re:ユーザーフォームのコントロール ichinose 05/9/29(木) 21:46 発言[未読]
【29313】Re:ユーザーフォームのコントロール 年寄り 05/9/30(金) 12:37 質問[未読]
【29315】Re:ユーザーフォームのコントロール WASI 05/9/30(金) 13:04 発言[未読]
【29316】Re:ユーザーフォームのコントロール 年寄り 05/9/30(金) 13:13 発言[未読]
【29317】Re:ユーザーフォームのコントロール ichinose 05/9/30(金) 13:28 発言[未読]
【29318】Re:ユーザーフォームのコントロール 年寄り 05/9/30(金) 13:50 お礼[未読]

【29291】ユーザーフォームのコントロール
質問  年寄り E-MAILWEB  - 05/9/29(木) 20:47 -

引用なし
パスワード
   UserForm1にn個のTextBox1....TextBoxNがあります。VBAで取得するControls()の添字の部分の数字は、プロパティ項目でどれに相当しますか?

【29295】Re:ユーザーフォームのコントロール
発言  ichinose  - 05/9/29(木) 21:46 -

引用なし
パスワード
   ▼年寄り さん:
こんばんは。

>UserForm1にn個のTextBox1....TextBoxNがあります。VBAで取得するControls()の添字の部分の数字は、プロパティ項目でどれに相当しますか?

↑このユーザーフォームにCommandButton1でも追加配置して

'========================================================
Private Sub CommandButton1_Click()
  Dim ctl As Control
  For idx = 0 To Controls.Count - 1
    MsgBox Controls(idx).Name
    Next
End Sub

これを実行すると、コントロールを作成した順序で名前が表示されませんか?
Controls()の()内に入る番号はそんな意味です。
各コントロールのプロパティとしてはありません。

と言うことが知りたかったのでしょうか?

【29313】Re:ユーザーフォームのコントロール
質問  年寄り E-MAILWEB  - 05/9/30(金) 12:37 -

引用なし
パスワード
   ▼ichinose さん:
いつも親切に対応していただきましてありがとうございます。

UserForm1に碁盤の目のようにn列m行のTextBoxがあります。ある特定のTextBoxをnとmの関数f(n,m)で取得したい。

UserForm1には他のControlもあります。UserForm1を作成時に、Controlのコピーや削除を行なうと、Control(idx)のidxがずれてきます。したがってidxと、nとmが関連付けられなくて困っています。Tabキーで移動する順番はTabIndexをいじればよいことがわかっています。idxもプロパティのどこかをいじればよいと考えた次第です。

ControlのNameで取得するには、TextBoxの数が多くてVBAのコードが冗長的になります。

質問を投げ掛けた理由が分かって頂けたでしょうか?

【29315】Re:ユーザーフォームのコントロール
発言  WASI  - 05/9/30(金) 13:04 -

引用なし
パスワード
   年寄り さん
ichinose さん
こんにちは

プロパティーの
(オブジェクト名)を変更すればいいのでは?

勘違いならごめんなさい。

【29316】Re:ユーザーフォームのコントロール
発言  年寄り E-MAILWEB  - 05/9/30(金) 13:13 -

引用なし
パスワード
   ▼WASI さん:
対応していただきまして、とてもうれしいです。

的を得た質問をするということは大変難しいですね?特にそのことをよく分かっていない人が、質問を発するということはなおさら難しい。

ごめんなさい。上手に質問が出来ずに。

【29317】Re:ユーザーフォームのコントロール
発言  ichinose  - 05/9/30(金) 13:28 -

引用なし
パスワード
   ▼年寄り さん、▼WASI さん、こんにちは。

例えば、Userform1にテキストボックスが

  TextBox1  TextBox2  TextBox3   TextBox4
  TextBox5  TextBox6  TextBox7   TextBox8
  TextBox9  TextBox10  TextBox11   TextBox12
  TextBox13  TextBox14  TextBox15   TextBox16
  TextBox17  TextBox18  TextBox19   TextBox20
  TextBox21  TextBox22  TextBox23   TextBox24


というように6行4列に配置されているとしましょう。
他にコントロールがあってもかまいません。
方法は、配列に入れてしまおうということなんですが・・・。

Userform1のモジュールに
'============================================================
Private tbltxt(1 To 6, 1 To 4) As MSForms.TextBox
'=============================================================
Private Sub UserForm_Initialize()
   For y0 = LBound(tbltxt(), 1) To UBound(tbltxt(), 1)
    For x0 = LBound(tbltxt(), 2) To UBound(tbltxt(), 2)
     Set tbltxt(y0, x0) = Controls("textbox" & UBound(tbltxt(), 2) * (y0 - 1) + x0)
     Next x0
    Next y0
End Sub


'というように予め配列に入れてしまうのです。
'こうしておけば、例えば Commandbutton1のクリックで

'===========================================================
Private Sub CommandButton1_Click()
  Dim t_row As Variant
  Dim t_col As Variant
  t_row = Application.InputBox("input row", , , , , , , 2)
  t_col = Application.InputBox("input column", , , , , , , 2)
  MsgBox tbltxt(t_row, t_col).Name
'↑細かいエラー処理してませんから、存在する行と列を指定してください
End Sub

とうように行番号と列番号によって、相当するテキストボックスが取得できます。

確認してください。

【29318】Re:ユーザーフォームのコントロール
お礼  年寄り E-MAILWEB  - 05/9/30(金) 13:50 -

引用なし
パスワード
   ▼ichinose さん:
おお、まさに、怪傑黒頭巾!ちょっと古かったかな?

いつもながら、まことにありがとうございます。

9109 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free