Page 851 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼長いマクロを省略したい maeda 03/3/6(木) 16:20 ┗Re:長いマクロを省略したい ichinose 03/3/6(木) 17:58 ┗Re:長いマクロを省略したい maeda 03/3/6(木) 20:47 ┗Re:長いマクロを省略したい ichinose 03/3/7(金) 1:31 ┗Re:長いマクロを省略したい maeda 03/3/7(金) 22:21 ─────────────────────────────────────── ■題名 : 長いマクロを省略したい ■名前 : maeda <fwhn0621@mb.infoweb.ne.jp> ■日付 : 03/3/6(木) 16:20 -------------------------------------------------------------------------
ユーザーフォームにテキストボックス等を95個配置し、各テキストボックス等にオブジェクト名を「氏名」「住所」などと設定しました。 テキストボックスの値を次のようにしてワークシートに記述したいのですがテキストボックスが多い為変数処理が出来ないか考えてますが 上手くいきません、いい方法はないでしょうか。 Worksheets("個人Data").Cells(touroku + 1, 1).Value = 氏名 'オブジェクトの名称を変数へ登録 For i = 1 To 95 aitem(i) = Worksheets("Rist").Cells(i, 11) Next オブジェクトを変数処理したい。 ' For i = 1 To 43 Worksheets("個人Data").Cells(touroku + 1, 1).Value = aitem(i) 'Next この方法だと変数に読み込んだデータ自体が記述されてしまう。 |
▼maeda さん: こんにちは。 >ユーザーフォームにテキストボックス等を95個配置し、各テキストボックス等にオブジェクト名を「氏名」「住所」などと設定しました。 >テキストボックスの値を次のようにしてワークシートに記述したいのですがテキストボックスが多い為変数処理が出来ないか考えてますが >上手くいきません、いい方法はないでしょうか。 ユーザーフォームにテキストボックスを4っつ配置します(オブジェクト名は何でもかまいません)。さらにコマンドボタンを一つ配置します。 テキストボックスのオブジェクト名は、Worksheets(1)のセルA1からA4に予め入ってます。 コマンドボタンがクリックされた時の処理は、Worksheets(2)のセルA1から下にテキストボックスの内容を移します。 と言うようなmaeda さんの考えられた手法を取ると・・・、 '==================================================== Sub test() '標準モジュール UserForm1.Show End Sub 以下、当該ユーザーフォームモジュール '==================================================== Dim text(1 To 4) As MSForms.TextBox 'テキストボックスの配列変数 '==================================================== Private Sub UserForm_Initialize() '配列変数に実際のテキストボックスをセット For i = 1 To 4 Set text(i) = Controls(Worksheets(1).Cells(i, 1).Value) Next End Sub '=========================================================== Private Sub CommandButton1_Click() '転記処理 For i = 1 To 4 Worksheets(2).Cells(i, 1).Value = text(i).text Next End Sub こんな方法ではいかがですか? |
▼ichinose さん: > >以下、当該ユーザーフォームモジュール >'==================================================== >Dim text(1 To 4) As MSForms.TextBox 'テキストボックスの配列変数 >'==================================================== >Private Sub UserForm_Initialize() >'配列変数に実際のテキストボックスをセット > For i = 1 To 4 > Set text(i) = Controls(Worksheets(1).Cells(i, 1).Value) > Next >End Sub > この場合、どのテキストボックスが変数の何番目かは確認できるのでしょうか? 転記処理を実行して確認しか方法はありませんか? 『Controls(Worksheets(1).Cells(i, 1).Value)』はワークシートになっておりますが ユーザフォームの場合も設定しなくてはいけないのでしょうか? 詳しい知識が不足しており、お尋ねですみません。 |
▼maeda さん: こんばんは。 ちょっと、変更しました。 記述したコードは、 ユーザーフォームにテキストボックス4っつ(名前を仮に 氏名、住所1、住所2、電話番号 にしてみました。何でもいいんですが説明の都合上、はっきりさせました)とコマンドボタンを一つ配置(これは前回と一緒です)します。 テキストボックス名のWorksheets(1)へのセットもコード上で行いました。 コマンドボタン(クリック)の処理は、前回同様、「テキスト内容をWorksheets(2)のセルA1から下に書き込む」です。 標準モジュールに、 '========================================= Sub test() UserForm1.Show End Sub 当該ユーザーフォームに '=================================================== '==================================================== Dim text() As MSForms.TextBox 'テキストボックスの配列変数 Dim txt_cnt As Long 'テキストボックスの数 '==================================================== Private Sub UserForm_Initialize() Call テキストボックス名を指定したシートに保管(Worksheets(1)) '配列変数に実際のテキストボックスをセット For i = 1 To txt_cnt ReDim Preserve text(1 To i) Set text(i) = Controls(Worksheets(1).Cells(i, 2).Value) Next With Worksheets(1) .Range(.Cells(1, 1), .Cells(txt_cnt, 2)).ClearContents '一端移したデータの消去 End With End Sub '=========================================================== Private Sub CommandButton1_Click() '転記処理 For i = 1 To txt_cnt Worksheets(2).Cells(i, 1).Value = text(i).text Next End Sub '============================================================= Sub テキストボックス名を指定したシートに保管(wsht As Worksheet) 'in : wsht テキストボックス情報を書き込むシートオブジェクト 'out : txt_cnt テキストボックスの数 Dim ctrl As MSForms.Control txt_cnt = 0 With wsht For Each ctrl In Controls If TypeName(ctrl) = "TextBox" Then .Cells(txt_cnt + 1, 1).Value = ctrl.TabIndex .Cells(txt_cnt + 1, 2).Value = ctrl.Name txt_cnt = txt_cnt + 1 End If Next If txt_cnt > 0 Then ' Tabindexプロパティでソート .activate .Range(.Cells(1, 1), .Cells(txt_cnt, 2)).Sort _ Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin End If End With End Sub 上記のように例題を変更しました。 >この場合、どのテキストボックスが変数の何番目かは確認できるのでしょうか? >転記処理を実行して確認しか方法はありませんか? 上のコードでは 例えば、「氏名」という名前のテキストボックスは、 text(氏名.tabindex+1) で変数(配列)から取得できますし、 text(controls("氏名").tabindex+1) でも取得できます。 例2 「住所1」のテキストボックスの場合は、同様に text(住所1.tabindex+1) または、 text(controls("住所1").tabindex+1) となりますが、こういうことですか? >『Controls(Worksheets(1).Cells(i, 1).Value)』はワークシートになっておりますが >ユーザフォームの場合も設定しなくてはいけないのでしょうか? ↑これの意味がわからないのですが・・・。 以上の内容はユーザーフォームのコントロールを対象としていますよ。 |
▼ichinose さん: いろいろ試しましたが上手く行かず、とりあえず同じような記述を繰り返しました。 時間が出来次第よく勉強します、ありがとうございます。 |