【無料配信♪】Renta !全タテコミ作品第1話

以下のようなテーブルがあります
ID  回答1  回答2
1   A    D
2   C    A
3   B    B

VBAで回答1と回答2のデータを得ようとした場合
Me!回答1
とするのですがこれを変数(文字列で)行う場合どうしたらよいでしょうか?
イメージとしては以下のようにしたいのですが・・

Dim str as String
str = "回答1"
Me!str

A 回答 (2件)

こんにちは。

maruru01です。

「Me!回答1」ということは、フィールド名ではなく、フィールドに連結したフォームのコントロールということですね。
(ウィザードでフォームを作るとフィールドと同じ名前になりますが。)

で、コントロールの参照の方法には、

Me("回答1")
Me.Controls("回答1")

という方法があります。
もし1、2の部分だけを変数(i)で指定したいなら、

Me("回答" & i)
Me.Controls("回答" & i)

になります。
コントロール名を全て変数で指定する場合は、

str = "回答1"
Me(str)
Me.Controls(str)

になります。
    • good
    • 0
この回答へのお礼

うまくいきました。
ありがとうございます。

お礼日時:2003/03/14 15:09

こんにちは、ats8181oyajiです



レコードセットの配列で取れます

Dim Recset As ADODB.Recordset

'レコードセット取得
Recset.Open ............

If Recset.EOF = False And Recset.BOF = False Then
'
w_ID = Recset(0).Value
w_KAITOU1 = Recset(1).Value
w_KAITOU2 = Recset(2).Value
end if

では
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2003/03/14 15:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QaccessのVBAで変数名でフィールド指定は?

VBAの記述として
フィールド名を指定するときに通常であれば
forms![顧客一覧]![ID]やforms![顧客一覧]![age]と記述しますが
この[ID]という部分についてあるフォームから
IDという文字があるときはIDフィールド、
ageという文字があるときはageフィールドに記述というのはできるのでしょうか?

Aベストアンサー

Dim strItem As String
strItem = "ID"
MsgBox Forms![顧客一覧].Controls(strItem)
のようなことでしょうか?

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

QAccessのDAOでフィールド名を配列に格納して・・・

Access2000のDAOで下記のようなコードで複写元テーブルから複写先テーブルにデータを追加するとします。

Set Rs1 = Db.OpenRecordset("複写元", dbOpenTable)
Set Rs2 = Db.OpenRecordset("複写先", dbOpenTable)

Do Until Rs1.EOF
Rs2.AddNew
Rs2!FL1 = Rs1!名前
Rs2!FL2= Rs1!性別
Rs2!FL3= Rs1!郵便番号
Rs2!FL4= Rs1!住所
   ・
   ・
Rs2! FL50= Rs1! 50番目
Rs2.Update
Rs1.MoveNext
Loop

複写元のフィールドが50フィールドもあると、いちいちRs1!名前とかRs1!性別とか記述するのが大変ですし、ものすごく長いコードになります。そこで、配列にしてやったらどうだろうかとこんなことをしてみましたがだめでした。

Dim I
Dim FieldsName
FieldsName=Array("名前","性別",・・・"50番目")
           ・
           ・
Do Until Rs1.EOF
Rs2.AddNew
For I=0 To 49
Rs2!フィールド(I) = Rs1!FieldsName(I)
Next
Rs2.Update
Rs1.MoveNext
Loop

じゃあTebleDifのTd.Fields().Nameを使って・・・・やっぱり失敗しました。

For I=0 To 49
Rs2!フィールド(I) = Rs1!Td.Fields(I).Name
Next

やりたいこと分かっていただけますでしょうか?要するにフィールド名を配列の様なもので格納しておいて、レコードの追加時に50回ループさせてRS2のフィールドにいれたいのです。何か良い方法は無いでしょうか。

Access2000のDAOで下記のようなコードで複写元テーブルから複写先テーブルにデータを追加するとします。

Set Rs1 = Db.OpenRecordset("複写元", dbOpenTable)
Set Rs2 = Db.OpenRecordset("複写先", dbOpenTable)

Do Until Rs1.EOF
Rs2.AddNew
Rs2!FL1 = Rs1!名前
Rs2!FL2= Rs1!性別
Rs2!FL3= Rs1!郵便番号
Rs2!FL4= Rs1!住所
   ・
   ・
Rs2! FL50= Rs1! 50番目
Rs2.Update
Rs1.MoveNext
Loop

複写元のフィールドが50フィールドもあると、いちいちRs1!名前とかRs1!性別とか記述す...続きを読む

Aベストアンサー

#2です。

一応自分なりにコードを作ってみました。

Dim I As Integer, Db As Database, Rs1 As Recordset, Rs2 As Recordset

Set Db = CurrentDb
Set Rs1 = Db.OpenRecordset("複写元")
Set Rs2 = Db.OpenRecordset("複写先")

Do Until Rs1.EOF
Rs2.AddNew
For I = 0 To 49
Rs2.Fields(I).Value = Rs1.Fields(I).Value
Next
Rs2.Update
Rs1.MoveNext
Loop
Rs2.Close
Rs1.Close
Set Rs2 = Nothing
Set Rs1 = Nothing
Set Db = Nothing

でいいと思います。ただし、前提条件として、テーブル「複写先」を作っていないとできませんが。

ご参考までに。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESS VBA レコードセットの参照方法について

ACCESS2000でシステムを作っています。
ADOを使って、SELECT句に"*" を使用した内部結合でデータを
抽出したときの結果の参照方法がわかりません。

SQL="SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id"
rsはレコードセット,ACはアクティブコネクションとして

rs.Open SQL, AC, adOpenKeyset, adLockOptimistic
にて結果を取得し、変数aにtable1のフィールド名の値を代入
しようとしています。

a = rs!table1.フィールド名

では「コンパイルエラー メソッドまたはデータメンバが
見つかりません」となり、値の参照ができません。

"*" でなく、フィールド名を明示して それぞれのフィールドに
"as 別名"をつければ
参照できますが、フィールドが多いので "*"を使用したいのです。

大変初歩的な質問かと思いますが、どうかよろしくお願いします。m(_ _)m

ACCESS2000でシステムを作っています。
ADOを使って、SELECT句に"*" を使用した内部結合でデータを
抽出したときの結果の参照方法がわかりません。

SQL="SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id"
rsはレコードセット,ACはアクティブコネクションとして

rs.Open SQL, AC, adOpenKeyset, adLockOptimistic
にて結果を取得し、変数aにtable1のフィールド名の値を代入
しようとしています。

a = rs!table1.フィールド名

では「コンパイルエラー メソッドまたはデータメン...続きを読む

Aベストアンサー

Dim rs as RecordSet
Set rs = ほげほげ
ってやってるなら
a = rs.fields(1)

a = rs.fields("table1.フィールド名")
で行ける筈だが?

QVBとアクセスでSQL文に変数を使いたいのですが

したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'(変数1)','(変数2)','(変数3)')"

変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか?

もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

Aベストアンサー

文字列なんで、&で連結すればOKです。

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'" & 変数1 & "','" & 変数2 & "','" &(変数3)& "')"

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

QACCESSでフィールド名の変更(VBA)

VBAを使ってテーブルのフィールド名等を変更させたいと思います。
そういう事ってできるのでしょうか?

フィールド名を作成者ではなく、利用者が設定するようにしたいと思っているのですが、どういった方法があるでしょうか?

よろしくお願いします。

Aベストアンサー

>ちなみに、それはどういったやりかたでやったら良いのでしょう?

例えば、[フィールド名対応表]という名前のテーブルで、[フィールド名][変換名]というフィールドを作ります。
で、[フィールド名]には予め実際のテーブルのフィールド名を、正しく入力しておきます。
[変換名]にも初期値として[フィールド名]と同じ値を入力しておきましょう。

まず、変換名の登録は、更新クエリを実行します。
仮に[誕生日]というフィールド名を[生年月日]という名前に変更するとすると、コードは以下のような感じ。


Dim SQL As String 'SQLステートメント

SQL = "UPDATE フィールド名対応表 SET 変更名 = '生年月日' WHERE フィールド名 = '誕生日'"
DoCmd.RunSQL SQL


次にフィールド名に付けられた変更名を拾ってくる方法は、


Dim temp As String '変更名

temp = DLookup("変更名", "フィールド名対応表", "フィールド名 = '誕生日'")


ちなみに、DLookup関数は、条件にあったデータの値を返す関数ですが、条件にあったデータがない場合は、Nullを返しますので注意して下さい。

>ちなみに、それはどういったやりかたでやったら良いのでしょう?

例えば、[フィールド名対応表]という名前のテーブルで、[フィールド名][変換名]というフィールドを作ります。
で、[フィールド名]には予め実際のテーブルのフィールド名を、正しく入力しておきます。
[変換名]にも初期値として[フィールド名]と同じ値を入力しておきましょう。

まず、変換名の登録は、更新クエリを実行します。
仮に[誕生日]というフィールド名を[生年月日]という名前に変更するとすると、コードは以下のような感じ。

...続きを読む

QAccessでテーブルの値をテキストボックスに代入するには?

[ID][文字列]の2つのフィールドからなる単純なテーブルがあり、削除クエリを併用して常に最新のデータしか格納されていない状態に工夫できました。(データは常に1つ)
そこでフォーム上にあるテキストボックスにこのテーブルの[文字列]フィールドのデータを表示させたいのですが、
どうしたらよいでしょうか?

また、このテーブルの[文字列]フィールドのデータを直接変数として使いたい場合はVBAでどのように記述すればよいのでしょうか?

Aベストアンサー

テーブルに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名")」
IDごとに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名","[ID]='" & Me.ID & "'")」

Dlookup関数のヘルプ
http://office.microsoft.com/ja-jp/assistance/HP010496551041.aspx

QAccessでテーブル名やクエリ名一覧の抜き出し

Accessでテーブルやクエリを沢山(100個以上?)使っております。

そこで、テーブル名やクエリ名の管理をしたいので、テーブル名(クエリ名)の一覧を抜き出したいのですが、どうすればいいのでしょうか?
または、そういうことは無理なのでしょうか??(;O;)

1個づつコピーペーストでテールブル名をエクセルに貼り付けて行こうかな?と思ったのですが、さすがに数が多すぎるので困っております。

できるだけ簡単な方法がいいのですが、もしなければVBAでもいいです。

おわかりの方がいらっしゃいましたら、よろしくお願いします。

Aベストアンサー

・クエリを新規作成
・以下SQLを貼り付け
SELECT MSysObjects.Type, MSysObjects.Name, MSysObjects.Flags
FROM MSysObjects
ORDER BY MSysObjects.Type, MSysObjects.Name;
・デザインビューで表示
あとは、TypeとFlagsの条件を変えてあげれば一覧できます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング