- ベストアンサー
Access VBA 全クエリ 繰り返し
Access VBAについてお尋ねさせていただきます。 Access VBAを利用して、以下の繰り返し処理を実行したいです。 (1):レコードの有無にかかわらず、すべてのクエリの名称だけを配列に取得する繰り返し処理 (2):レコードの有無にかかわらず、すべてのクエリを開き、各クエリのレコード件数を配列に取得する処理 どのように記述すればよろしいでしょうか?
- みんなの回答 (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 分からないところがあれば補足してください。