No.5ベストアンサー
- 回答日時:
piroin654 さんへ
http://msdn.microsoft.com/ja-jp/library/cc948691 …
より抜粋
同じプロジェクトに、ADO と DAO の両方の参照を含める場合は、
オブジェクトを宣言するときに、どちらのライブラリを使用するかを明示的に指定する必要があります。
DAO と ADO にはいくつか同じ名前のオブジェクトが含まれているためです。
たとえば、どちらのモデルにも Recordset オブジェクトが含まれているので、次のコードはあいまいです。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dim rst as Recordset
使用するオブジェクト モデルを指定するには、次のように修飾子を含める必要があります。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dim rstADO As ADODB.Recordset
Dim rstDAO As DAO.Recordset
修飾子を省略すると、Visual Basic for Applications (VBA) は先に参照されたモデルのオブジェクトを選択します。
したがって、[参照設定]ダイアログ ボックスの参照リストが以下の順序で並んでいる場合、
修飾子なしの Recordset として宣言されているオブジェクトは、DAO の Recordset になります。
Visual Basic For Applications
Microsoft DAO 3.6 Object Library
Microsoft ActiveX Data Objects 2.1 Library
Microsoft ADO Ext. 2.1 for DDL and Security
Microsoft Jet and Replication Objects 2.1 Library
抜粋終了(傍点は当方で付けました)
なので、修飾子を含めた記述にしといた方が後々面倒が少ないと思いますよ。
回答するときも楽だし (^^ゞ
nicotinismさんも、piroin654さんも丁寧な
ご回答、大変感謝しております。
VBAは久しぶりで、他の言語と違いクセがありますが
使いこなせるように頑張りたいと思います。
piroin654さんにもベストアンサーをつけさせて頂きたいところですが、
今回はnicotinismさんにベストアンサーとさせて頂きたいと思います。
piroini654さんも、ご回答助かりました。
また宜しくお願いいたします。
No.4
- 回答日時:
No2の Private Sub cmd列指定_Click() のところで、
Dim fld As Field
Dim ctl As Control
の二つは使っていないのでコメントアウトするか
削除しておいてください。もう一つこの
プロシージャの最後に、
rs.Close: Set rs = Nothing
End Sub
としておいてください。後始末が抜けていました。
なお、以下はDAOを使っているので、コード表の
ツールから参照設定を開き、
Microsoft DAO xx Object Library
にチェックを入れ↑ボタンで上げられるところまで
あげてください。xxは3.6のような数字です。
No.3
- 回答日時:
追加です。
操作は、cmdレコード数 をクリックすると txNumbers に
レコード数が表示されます。
txPosition に行の位置を入れて cmd行移動 を
クリックすると、見た目のレコード選択と
カレントレコードを一致させます。
txRow に列の位置を入力して cmd列指定 を
クリックすると、列の名前、すなわちフィールドの
名前とフィールドの値をメッセージボックスで
表示します。
No.2
- 回答日時:
だいたいのことはnicotinismの回答で済むと思います。
少し手の込んだ回答をしてみることにしました。
(1)
メインフォームにテキストボックスを三つ。
txNumbers
txPosition
txRow
同じくメインフォームにボタンを三つ。
cmdレコード数
cmd行移動
cmd列指定
(2)
埋め込み0とはサブフォームを表示するコントロール名です。
サブフォームそのものの名前ではありません。このあたりは
おわかりだと思います。なお、cmd列指定での変数iはフィールド
のIndexの値が0から始まるので、何列目ということで
i = Me.txRow.Value - 1 として、見た目の列でテキストボックス
の値を取得するようにしています。
Option Compare Database
Option Explicit
'ブックマークの設定
Dim bk As Variant
Private Sub cmdレコード数_Click()
'サブフォームに表示されているレコード数の取得
Dim rs As Recordset
Set rs = Me.埋め込み0.Form.RecordsetClone
If rs.RecordCount > 0 Then
rs.MoveLast
rs.MoveFirst
bk = rs.Bookmark
Me.埋め込み0.Form.Bookmark = bk
Me.txNumbers = rs.RecordCount
End If
rs.Close: Set rs = Nothing
End Sub
Private Sub cmd行移動_Click()
'見た目のレコード選択とカレントレコードを一致させる
Dim rs As Recordset
Dim l As Long
Set rs = Me.埋め込み0.Form.RecordsetClone
If rs.RecordCount > 0 Then
'ブックマークを先頭レコードに移動
rs.MoveFirst
bk = rs.Bookmark
If Me.txPosition > 0 Then
If Not rs.EOF Then
rs.Move Nz(Me.txPosition - 1)
If Not rs.EOF Then
'サブフォームの表示をカレントレコードに移動
bk = rs.Bookmark
Me.埋め込み0.Form.Bookmark = bk
End If
End If
End If
End If
rs.Close: Set rs = Nothing
End Sub
Private Sub cmd列指定_Click()
'カレントレコードの指定した列の名前と値の表示
Dim rs As Recordset
Dim fld As Field
Dim ctl As Control
Dim i As Long
Set rs = Me.埋め込み0.Form.RecordsetClone
i = Me.txRow.Value - 1
If i >= 0 And i <= rs.Fields.Count - 1 Then
MsgBox "カレントレコードの指定された列の名前は " & rs.Fields(i).Name
MsgBox "カレントレコードの指定された列の値は " & rs.Fields(i).Value
End If
End Sub
No.1
- 回答日時:
こういうことかな?メインフォームのコマンドボタンのイベントに割り当ててみました。
Private Sub コマンド20_Click()
MsgBox "レコード数= " & Me!サブフォーム名.Form.RecordsetClone.RecordCount & vbCrLf _
& "現在位置= " & Me!サブフォーム名.Form.CurrentRecord & vbCrLf _
& "フィールドの値=" & Me!サブフォーム名.Form!フィールド名.Value
Dim rs As DAO.Recordset '要参照設定 Microsoft DAO 3.6 ObjectLibrary OR Later
'例 Microsoft Office 14.0 Access databese engine object Library
Set rs = Me!サブフォーム名.Form.RecordsetClone
rs.AbsolutePosition = 0 'ゼロからレコード数-1まで
MsgBox rs!フィールド名
rs.Close: Set rs = Nothing
End Sub
後は芋づる式に調べていけば突破口になる?と?思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) エクセルVBA 2 2022/04/27 13:29
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Access(アクセス) Access DLookup vbaで条件を2件設定したい場合どうすればよいでですか? 現在 If( 1 2023/06/28 14:28
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
Access サブフォームでの選択行の取得
その他(データベース)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
ACCESS VBAサブフォーム(DATA SHEET)の値の取得方法
Visual Basic(VBA)
-
-
4
Access でレコードセレクタが押されたときのイベントは?
その他(プログラミング・Web制作)
-
5
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
6
access サブフォームにリストを表示させたいが一件しかレコードが表示されない
Access(アクセス)
-
7
アクセス VBAで列の入れ替え データシートビュー
その他(Microsoft Office)
-
8
データシートビューのタイトル行の色を変える方法
Access(アクセス)
-
9
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
10
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
11
ACCESS フォームでの、データシートビューで表示できない
Access(アクセス)
-
12
Accessフォームで詳細内の任意の行へSetFocus
Excel(エクセル)
-
13
サブフォームの新規レコードに移動したい アクセス
Access(アクセス)
-
14
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
15
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
16
ACCESSのフォームで列固定?
Access(アクセス)
-
17
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
18
アクセスでサブフォームのレコードを取得したい。
Access(アクセス)
-
19
Access サブフォームのレコードソースを変更するには
Access(アクセス)
-
20
ACCESSでコントロールソースの変更
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
アクセスでレポートの1印刷内...
-
JSPのNULLレコード表示について...
-
差し込み印刷のレコード数について
-
ACCESSで大量の更新を行うと「...
-
レコードセット(ADO.Recordset)...
-
データセットのレコード更新が...
-
ヘッダレコードとトレーラレコ...
-
レコードが存在しなかった場合
-
ファイル書込みで一行もしくは...
-
ACCESS VBA テーブルデータに...
-
レコード長を数えてくれる関数
-
ADODBのRecordset.Deleteのエラ...
-
サブフォームに新規レコードを...
-
DataGridViewにてセル以外をク...
-
[VBA] ADOの Clone と AddNew
-
バイナリーファイルの追記
-
Line Inputで文字化け(助けて...
-
COBOLでのランダムアクセス
-
vb.netのdatatableのレコード削...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
ファイル書込みで一行もしくは...
-
レコードが存在しなかった場合
-
アクセスでレポートの1印刷内...
-
JSPのNULLレコード表示について...
-
カレントレコードが無い事を判...
-
DataGridViewの、選択されてい...
-
差し込み印刷のレコード数について
-
ACCESSで大量の更新を行うと「...
-
DataGridViewの内容をDBに反映...
-
Access でレコードセレクタが押...
-
固有レコード識別子の選択とは
-
レコードセット(ADO.Recordset)...
-
Access を×ボタンで閉じ...
-
DataGridViewにてセル以外をク...
-
ヘッダレコードとトレーラレコ...
-
ワードの差込印刷で教えて下さ...
-
サブレンジ分割されたNDB(富士...
-
データセットのレコード更新が...
-
[VBA] ADOの Clone と AddNew
おすすめ情報