• ベストアンサー

オブジェクトを変数名で使用したいのですが

初めまして。 AccessのVBAを使用しているのですが、 コマンドボタンを10個用意して、 名前をそれぞれ1~10にしたのですが、 それらを繰り返し処理をしたいのですが、どうしたらいいですか? 例えば、 for i = 1 To 10 i.enabled = True Next i という風にしたかったのですが、 できないんです。 助けてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Access の VBA の事を何も知らないので、外しているかも知れません。 VBでは、コントロール配列にすると簡単できますが。 コマンドボタンの名前は全部 Command1 となります。 ひとつひとつは、Command1(1),Command1(2)・・・・Command1(10) となります。 for i=1 to 10 Command1(i).Enabled=true next i VBA にコントロール配列と言う考え方がなかったら、ごめんなさい。

michacha
質問者

お礼

できました!! ありがとうございました! for i = to 27 if me.control(i).name=i then 処理  end if で、オブジェクトの名前と一致したら・・・ということができました! 有難うございました!

その他の回答 (3)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.4

For i = 1 to 10  Me.Controls(CStr(i)).Enabled=True Next i ですね。 「ボタン1」~「ボタン10」ってな名前が付いている場合は、 For i = 1 to 10  Me.Controls("ボタン" & i).Enabled=True Next i になります。 尚、Accessにはコントロール配列はありません。

  • Yackn
  • ベストアンサー率42% (12/28)
回答No.3

フォームのオブジェクトを列挙してその名前によって買えてあげればいいと思います。(コントロール配列がないので) 適当にボタンを貼り付けてから、cmdEnableという名前のボタンを作成してコードビルダに下記のコードを貼り付けてください。 アクセス97で確認しましたが動くようです。 Private Sub cmdEnable_Click() Dim com As Control For Each com In Me If com.Name Like "コマンド*" Then com.Enabled = False End If Next End Sub

回答No.2

> オブジェクトを変数名で使用したいのですが タイトルを見落していました。 外しました(^。^;)、すみません。

関連するQ&A

  • VBAにおいて、""内で変数を使用したい

    VBAにおいて、""内で変数を使用したい 0864_001.xls 0864_002.xls … 0864_009.xls というファイルがあるとき、0864_001.xlsを開く→処理→閉じる→0864_002.xlsを開く→… というように処理をしたいと思い、以下のようなマクロを作成しました。 Sub Test() Dim i As Integer For i = 1 To 9 Workbooks.Open ThisWorkbook.Path & "\0864_00i.xls" 処理 閉じる Next i End Sub 実行しようとしてもファイルを開くことが出来ずに困っています。 ""内で変数を使うことは出来ないのでしょうか? また、どのようにすれば実行できるようになるのか教えてください。

  • オブジェクト名に変数は?

    List1 List2といったオブジェクト名についている「1」とか「2」と言った数字を変数に出来ないのでしょうか? List1.Clear List2.Clear と一つずつ記述するのでなく、たとえば for I=0 to 2 ListI.Clear next i みたいにならないのでしょうか?VB6使ってます ご教授お願いします。

  • 変数の結合について

    コマンドボタン1、コマンドボタン2と 連続させて動作させたいのですが、 「subまたはfunction~~」とエラーが出てしまいます。 以下は例です。 for i = 0 to 3 CommandButton(p).BackColor = 青 next i どう間違っているのでしょうか?

  • オブジェクト名

    複数のWinsockを使用したいです。 オブジェクト名Winsock1~Winsock6があるとします。 例えば Dim i As Integer Dim strWinsock As String For i = 1 to 6 strWinsock = Winsock & i //処理 Next 上記のようなループで文字列strWinsockを、オブジェクト名として使用することはできないのでしょうか? また、もし他の方法があるようでしたら、教えて下さい。

  • オブジェクト名を変数で参照できますか

    VB初心者です。 配列の場合 Dim str(10) as string と宣言し、i番目のデータを取り出したいときには、str(i) と記述すると思います。 そこで質問ですが、例えばCommandが1~10まであるとします。 オブジェクト名はそのまま(Command1, Command2)で、それぞれのCaptionに違ったデータが入っています。 (例えば、Command1のCaptionには'A' Command2のCaptionには'B'といった感じに) ある文字列があり、For文を使い、CommandのCaptionとその文字列が一致したときに文字列を出力するという処理を行いたいとき、どのように Command1~10のCaptionを回せばいいのでしょうか? コードを記述しておきます。 Dim str(10) as String Dim i as Integer Dim j as Integer for i = 0 to 10 for j = 0 to 10 ☆☆ if Command(i).Caption = str(j) then print.str(j) end if next next ☆☆のところです。 可能であれば回答をお待ちしております。 環境は windows XP, VB6.0 です。

  • VBA 変数を使うべき?

    VBA 変数を使うべき? VBAを独学で勉強中のものです。 エクセルVBAでデータが入っている行数分処理を行いたい場合などに ------------------------------------------------ lastRow = cells(rows.count,1).end(xlup).row for i = 1 to lastRow ・・・ next i ------------------------------------------------ などと最終行を変数に代入して使う場合と ------------------------------------------------ for i = 1 to cells(rows.count,1).end(xlup).row ・・・ next i ------------------------------------------------ などと直接for文の中で指定する場合とでは結果は同じと思うのですが 結果以外の部分で見た場合どちらで行うほうがいいのでしょうか?

  • オプション名やフレーム名と変数の組み合わせControl

    ExcelのVBAで、オプション名やフレーム名と変数を組み合わせて使いたく、Controlsを使ってやってみたのですが、「subまたはfunctionが定義されていません」とエラーメッセージが出て実行できません。コードは下記のようになっているのですが、何がいけないのでしょうか?VBA初心者の為、全くわかりません。どうか宜しくお願いします!! ちなみに、sheet1とかのシート名をクリックして開いたところに記述しています。標準モジュールではないです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) C = ActiveCell.colmun Dim N As Long, FR As Long For R = 4 To 13 N = R - 3 If Range(R, C) <> "" Then For FR = 1 To 6 Controls("NYURYOKU.Frame" & FR & ".NO" & N & "_" & FR).Enabled = False Next Else For C2 = 3 To 8 If Range(R, C2) = "" Then For FR = 1 To 6 Controls("NYURYOKU.Frame" & FR & ".NO" & N & "_" & FR).Enabled = False Next End If Next End If Next End Sub

  • CheckBoxの配列化

    Excel2000のVBAで以下のような処理をしたいのでご教示願います。 Userform1にCheckBox1~CheckBox10の10個のチェックボックスがあったとして以下のようにFor文でまとめて処理したいのですがうまくいきません。  For I = 1 to 10   UserForm1.CheckBox(I).value = True  NEXT

  • シート上のOLEオブジェクトのタイプを取得する

    シート上のOLEオブジェクトのタイプを取得するvbaは? Sub Sample() Dim i As Integer For i = 1 To ActiveSheet.OLEObjects.Count Debug.Print ActiveSheet.OLEObjects(i).Type Next i End Sub これだとエラーになります。 テキストボックスとかコマンドボタンとかの情報を取得するには どうすればいいでしょうか?

  • ACCESS VBA のFor文のStepについて

    ACCESS VBAでFor文を使った構文を作っているのですが、Stepについて+、-は使えたのですが、乗算、割り算は使えないのでしょうか? For i = 10 to 10000 step *10 ~処理 Next i にすると"*"でコンパイルエラーが出ます。 10、100、1000、10000の処理がしたいのです。 Forでは無理なのでしょうか?