- ベストアンサー
Access VBA 全クエリ 繰り返し
Access VBAについてお尋ねさせていただきます。 Access VBAを利用して、以下の繰り返し処理を実行したいです。 (1):レコードの有無にかかわらず、すべてのクエリの名称だけを配列に取得する繰り返し処理 (2):レコードの有無にかかわらず、すべてのクエリを開き、各クエリのレコード件数を配列に取得する処理 どのように記述すればよろしいでしょうか?
- よしくん(@Yoshikun0928)
- お礼率19% (28/144)
- Access(アクセス)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
少し時間がたっていますが、回答が ついていないので回答しておきます。 以前、似たような質問に回答していますが、 https://okwave.jp/qa/q8013313.html このコードを少し手直ししてみました。 配列はVariant型とLong型が混在しますがそのまま にしておきます。 なお、対象とするクエリは選択クエリとクロス集計クエリ としておきます。アクションクエリなどははずします。 Sub cmdRecCount() Dim db As DAO.Database Dim qdf As DAO.QueryDef Dim myQdfName As Variant Dim strSQL As String Dim i As Long Dim j As Long Dim k As Long Dim myRsCount() As Long Set db = CurrentDb 'クエリ名 ReDim myQdfName(i) For Each qdf In db.QueryDefs If Left(qdf.Name, 1) <> "~" Then '選択クエリとクロス集計クエリを選ぶ If qdf.Type = 0 Or qdf.Type = 16 Then ReDim Preserve myQdfName(i) myQdfName(i) = qdf.Name i = i + 1 End If End If Next qdf If i = 0 Then MsgBox "対象となるクエリは存在しません" Exit Sub End If 'レコード件数 ReDim myRsCount(k) For j = LBound(myQdfName) To UBound(myQdfName) ReDim Preserve myRsCount(k) myRsCount(k) = funcRecCount(myQdfName(j)) 'イミディエイトウィンドウに出力して確認 Debug.Print myQdfName(j) & " ----- " & myRsCount(k) k = k + 1 Next j Set qdf = Nothing db.Close: Set db = Nothing End Sub 'レコード件数を求める関数 Private Function funcRecCount(ByVal strQueryName As String) As Long Dim db As DAO.Database Dim rs As DAO.Recordset Dim strSQL As String strSQL = "SELECT COUNT(*) AS RecCnt FROM " & strQueryName Set db = CurrentDb Set rs = db.OpenRecordset(strSQL) funcRecCount = rs!RecCnt rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Function 分からないところがあれば補足してください。
関連するQ&A
- Access VBA クエリパラメーターについて
Access VBA についてご質問させていただきます。 AccessVBAにてフォームを起動したときに、ユーザーで作成したクエリにおいて各クエリのデータ件数を取得するプログラムを作成いたしました。 '各クエリの件数をカウントする処理 Public Sub Data_Count() 'カウント用変数を宣言して、初期化する Dim i, j As Integer: i = 0: j = 11: b = 0: Dim rs As Recordset: Dim str(1) As String Dim Fname As Form: Set Fname = Forms!F99_メイン Dim mydb As Database: Set mydb = CurrentDb 'クエリ名・エクセル名用配列を初期化する Erase QName: Erase EName: Erase Count 'クエリの数だけ繰り返す For Each myqer In mydb.QueryDefs If Left(myqer.name, 1) = "Q" And Left(myqer.name, 3) <> "Q0_" Then 'クエリ名用変数の要素数を変更し、クエリ名を格納する ReDim Preserve QName(i): QName(i) = myqer.name 'エクセル用変数の要素数を変更し、エクセルファイル名を格納する ReDim Preserve EName(i): EName(i) = QName(i) & ".xlsx" '件数用配列の要素数を変更する ReDim Preserve Count(i) 'クエリを開く Set rs = CurrentDb.OpenRecordset(QName(i)) 'クエリのレコードが0件の場合 If rs.EOF Then 'クエリの件数を保存する Count(i) = 0 'クエリのレコードが1件以上の場合 Else 'クエリの最終行に移動してクエリ件数を保存する rs.MoveLast: Count(i) = rs.RecordCount End If End If rs.Close i = i + 1 End If Next End Sub 上記のコードを実行してみたところ、ユーザーで作成したクエリを開く際に、 実行時エラー'3061':パラメーターが少なすぎます。1を指定してください。というエラーが発生してしまいました。 どのように修正すればよろしいでしょうか?
- 締切済み
- Visual Basic
- Access2002でクエリからVBAへの読み込み
10個程前の質問で「Access2000でテーブルをVBAからテーブルを読み込む方法・・・」というのがありますが、私も同じ状況で3日程悩んでいたのですが、この記事を見て指示通りで解決しました。 本題の私の質問ですが、テーブルをVBAに読み込めるのでしたらクエリもVBAへ読み込めるのでしょうか? (1)クエリ→VBA→クエリ (2)クエリ→VBA→テーブル 記述の仕方を教えてください。Access2002です。
- ベストアンサー
- オフィス系ソフト
- ExcelからAccessのクエリを呼び出したい
約20,000レコードほどのデータを一気にExcelのVBA上の選択SQLでEditとUpdateで処理しようと思ったのですが、一気に処理できるレコード数に制約があるようでエラーになりました。 Access内のクエリだとOKみたいですがExcelからAccessのクエリを呼び出す方法がわかりません。 どうしたらいいのでしょうか? よろしくお願いします。 バージョンは2002です。
- 締切済み
- オフィス系ソフト
- エクセルからアクセスのテーブルやクエリのレコード数を取得することは可能でしょうか?
エクセルもアクセスも起動している状態で、エクセル側でマクロを実行してアクセスのとあるテーブルやクエリのレコード数を取得したいのですがどうしていいのかわかりません。アクセス自体での取得方法もわかりません。SQLというのを使わないと不可能なのでしょうか? VBAで可能でしたらどういったコードを書けばいいのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Access2000でVBAからパラメータクエリを実行
Access2000でフォームからの値を参照して実行するクエリを作りました。 SQLで表すと、以下のようなものです。 クエリ名:test SELECT TEST.HAKKODTE FROM TEST WHERE (((TEST.HAKKODTE)=Format([Forms]![F_メニュー]![txtNyukinDate],"yyyymmdd"))); このクエリをダブルクリックで実行すると問題なく実行できます。 これを、VBAからレコードを参照したいと思い、 以下のように記述しました。 Dim cn As ADODB.Connection Set cn = CurrentProject.Connection Dim rs1 As ADODB.Recordset Set rs1 = New ADODB.Recordset Dim sqlstr As String sqlstr = "SELECT * FROM test;" rs1.Open sqlstr, cn, adOpenKeyset, adLockOptimistic しかし、Open処理で、「1つ以上の必要なパラメータの値が設定されていません」 というエラーになってしまいます。 VBAを実行するときに、[Forms]![F_メニュー]![txtNyukinDate]に きちんと値は入力されています。 これを実行する方法はあるでしょうか?
- ベストアンサー
- その他(データベース)
- アクセス2000でVBAを使ってクエリを実行したいのです
Access2000でVBAを使っています。 Docmdでクエリを実行させたいのですが、 DoCmd.OpenQuery stDocName1, acNormal, acHidden とするとクエリの実行結果が表示されます。 クエリだけ実行されて実行結果を非表示にする方法は ありますでしょうか? Form1のコマンドボタンを押下後、クエリが実行されて 別のFormにデータ表示させたいので、なるべくクエリの実行結果を表示させたくないのです。 よろしくお願いいたします
- ベストアンサー
- オフィス系ソフト
- ACCESS【更新クエリの中断ができない】
ACCESS初心者です。質問がわかりにくかったらすみません。 ACCESSの更新クエリで、レコードのカンマをスペースに置き換える式を作りました。 クエリを実行すると、 ”更新クエリを実行すると、テーブルのデータが更新されます” と、メッセージが表示され”はい”で次に進むと ”*件のレコードが更新されます。”と正確な件数が表示されます。 ただ、ここでやはり中断したいと思い、”いいえ”を選択しても、 レコードは更新されてしまいます。何故でしょうか?教えてください。 ______________________ フィールド: 型名 テーブル: データ統合 レコードの更新: Replace([型名],","," ") 抽出条件: Like"*,*"
- ベストアンサー
- オフィス系ソフト
- Access クエリでできないことは?
Accessの勉強をしていまして、だいたいひととおりはわかるのですが (VBAに関してはかじる程度です) SQLについて知りたいことがありますので、質問させてください。 Accessではクエリの裏でSQLが記述されているのは知っていますし、 簡単なクエリであればSQLを読むこともできます。 ただ、今後より深くSQLを勉強していくべきかどうか悩んでいまして・・・ 基本的には、クエリでできるならそれでいいと考えています。 ただ、たとえばユニオンクエリのようにSQLを直接記述しないとできないことも あるようですので、質問です。 SQLを記述しないとできないことというのは、他に何があるのでしょうか? かなり特殊なことであれば(パススルーとか?)ほとんど必要ないような気も していますが、普通に使っていて必要になるようなことで何かあるでしょうか? よろしくお願いします!
- ベストアンサー
- その他MS Office製品
- Access VBAでクエリーのレコード件数を取得したいのですが
Access2003のVBAで次のような構文を用いてクエリーの該当レコード数を取得したいのですがうまく出来ません。 構文又は手法が間違っているのでしょうか。 Dim db As Database Dim rs As Recordset Dim cnt As Long Set db = CurrentDb Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable) cnt = rs.RecordCount ※OpenRecordsetの行で「実行時エラー'3219'無効な処理です」と出てしまいます。 又、”該当顧客リストクエリ”では特定の抽出条件を設定して、”顧客リストテーブル”の一部を抽出するようにしています。
- ベストアンサー
- その他(データベース)
- EXCEL vbaからACCESSのクエリを開く
EXCEL2010 WEBを参照してEXCEL VBAでACCESSのクエリを開くマクロを流用しました。 下記がマクロの内容です。 Private Sub Import() Dim db As ADODB.Connection Dim rs As ADODB.Recordset 'ACCDBファイルに接続します Set db = New ADODB.Connection db.Provider = "Microsoft.Ace.OLEDB.12.0" db.Open "C:\work\TEHAI.accdb" 'レコードセットを開きます Set rs = New ADODB.Recordset 'Accessのクエリを開く rs.Open Source:="TEHAI", ActiveConnection:=db If rs.EOF Then MsgBox "抽出した結果、レコードが見つかりません。" Else ' レコードをシートへ貼り付ける Range("A1").CopyFromRecordset rs End If rs.Close Set rs = Nothing Set db = Nothing End Sub これを実行すると、 抽出した結果、レコードが見つかりません。 が表示されます。 ACCESS単体でTEHAIクエリを実行したら、約3万件くらいヒットします。 EXCELマクロから実行したらACCESSからデータをもってこられません。 なぜレコードが見つかりません、 となるのでしょうか? マクロのどこがおかしいのか、教えていただきたく。 ちなみに、もともとの内容から変更したのは db.Open "C:\work\TEHAI.accdb" rs.Open Source:="TEHAI", の2ヶ所だけです。
- ベストアンサー
- Excel(エクセル)