こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access VBA 全クエリ 繰り返し

Access VBAについてお尋ねさせていただきます。
Access VBAを利用して、以下の繰り返し処理を実行したいです。

(1):レコードの有無にかかわらず、すべてのクエリの名称だけを配列に取得する繰り返し処理
(2):レコードの有無にかかわらず、すべてのクエリを開き、各クエリのレコード件数を配列に取得する処理

どのように記述すればよろしいでしょうか?

投稿日時 - 2019-12-16 10:23:05

QNo.9690744

困ってます

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

少し時間がたっていますが、回答が
ついていないので回答しておきます。

以前、似たような質問に回答していますが、
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


分からないところがあれば補足してください。

投稿日時 - 2019-12-24 14:18:07

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問