• ベストアンサー

Access VBA 全クエリ 繰り返し

Access VBAについてお尋ねさせていただきます。 Access VBAを利用して、以下の繰り返し処理を実行したいです。 (1):レコードの有無にかかわらず、すべてのクエリの名称だけを配列に取得する繰り返し処理 (2):レコードの有無にかかわらず、すべてのクエリを開き、各クエリのレコード件数を配列に取得する処理 どのように記述すればよろしいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.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