
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Access サブフォームでの選択行の取得
その他(データベース)
-
ACCESS VBAサブフォーム(DATA SHEET)の値の取得方法
Visual Basic(VBA)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
-
4
Access2000 サブフォームのRecordSet取得法
Access(アクセス)
-
5
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
6
フォームウィンドウを最前面に表示したい(ACCESS)
Microsoft ASP
-
7
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
8
ACCESS サブフォームのフィールドにカーソルをあてる
Access(アクセス)
-
9
Access サブフォームでの複数行選択
その他(プログラミング・Web制作)
-
10
vbaで列を非表示にする方法はありますか?(フォームのデータシートビュー)
Excel(エクセル)
-
11
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
12
dbFailOnError とは?
その他(データベース)
-
13
ACCESSのBookmarkプロパティの使い方
その他(データベース)
-
14
2つ目のレコードの値を取得するには?
Access(アクセス)
-
15
Access VBA acCmdSelectRecordについて
その他(データベース)
-
16
ODBCリンクの際にACCESSでは読み取り専用にしたい!
Oracle
-
17
アクセスで サブフォームの表示について
その他(データベース)
-
18
サブフォームのコントロールの値を取得したい(VBA)
Access(アクセス)
-
19
クエリで出来た表にチェックボックスを追加する
その他(Microsoft Office)
-
20
サブフォームを非表示させる方法を教えて下さい
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
ACCESSで大量の更新を行うと「...
-
ADOでエクセルからアクセス...
-
データセットのレコード更新が...
-
ワードの差込印刷で教えて下さ...
-
postgresql DELETE後commit...
-
大量のテキストデータの集計に...
-
サブレンジ分割されたNDB(富士...
-
カレントレコードが無い事を判...
-
Access を×ボタンで閉じ...
-
ヘッダレコードとトレーラレコ...
-
ファイル書込みで一行もしくは...
-
アクセスでレポートの1印刷内...
-
DataGridViewの内容をDBに反映...
-
COBOLでのランダムアクセス
-
エラー番号=5 制約を有効にで...
-
Accessで日付が変わると番号が...
-
Oracleでの文字列連結サイズの上限
-
OracleのSQL*PLUSで、デー...
-
GROUP BYを行った後に結合した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
差し込み印刷のレコード数について
-
レコードが存在しなかった場合
-
アクセスでレポートの1印刷内...
-
DataGridViewの、選択されてい...
-
JSPのNULLレコード表示について...
-
ヘッダレコードとトレーラレコ...
-
ACCESSで大量の更新を行うと「...
-
サブレンジ分割されたNDB(富士...
-
カレントレコードが無い事を判...
-
ワードの差込印刷で教えて下さ...
-
固有レコード識別子の選択とは
-
Access でレコードセレクタが押...
-
[VBA] ADOの Clone と AddNew
-
ファイル書込みで一行もしくは...
-
DataGridViewの内容をDBに反映...
-
VB6.0のIsNull関数に相当するもの
-
Access を×ボタンで閉じ...
-
Accessデータシートビューの行...
-
Line Inputで文字化け(助けて...
おすすめ情報