VBAの以下コードでクエリである条件を抽出した結果、
TM_COUNT(i) = REC![件数].Value の箇所で「インデックスが有効範囲にありません」とエラーがでます。
qry.SQL = TM_DATA()の実行結果はレコード件数27件あるのに、変数iは21件で止まっています。
何が問題か教えていただけますでしょうか?
Set qry = db.CreateQueryDef("")
qry.SQL = TM_DATA()
Set REC = qry.OpenRecordset
i = 1
Do Until REC.EOF
TM_COUNT(i) = REC![件数].Value
TM_NAME(i) = REC![部門].Value
StrBody = StrBody & " " & TM_NAME(i) & " " & TM_COUNT(i) & "台" & Chr(13) & Chr(10)
i = i + 1
REC.MoveNext
Loop
Set qry = Nothing
Set REC = Nothing
SQL = ""
i = 1
TM_DATA() というのは自作関数ですか。
qry.SQL にはどのようなSQL文がセットされていますか。
考えられる原因としては、上記のSQLに「件数」というフィールドがないということです。
hatena様
ご回答ありがとうございます。
TM_DATA() の中身は以下の通りです。
Function TM_DATA()
TM_DATA = "SELECT T.[部門], Count(T.[部門]) AS 件数 FROM TEIKEN AS T"
TM_DATA = TM_DATA & " WHERE (((Format([次回],'yyyy/mm'))=Format(Now(),'yyyy/mm'))) GROUP BY T.[部門] HAVING (((T.[部門]) Is Not Null));"
End Function
以上、よろしくお願い致します。
TM_COUNT(i)
TM_NAME(i)
というのは配列だと思いますが、これの宣言部分のコードも提示してもらえますか。hatena様
お世話になります。
以下でよろしいでしょうか?
Dim TM_COUNT(20) As Integer
Dim TM_NAME(20) As String
配列の要素数が20なので、当然そうなりますね。
動的配列で宣言しておいて、レコード件数を取得してからReDimで要素数を設定しましょう。
動的配列については下記を参照してください。
Office TANAKA - 変数の使い方[部屋数を変えられる動的配列]
hatena様
お世話になります。
解決しました!
Dim TM_COUNT(20) As Integer
Dim TM_NAME(20) As String
の意味を理解せず使用していました。
これを機会に良い勉強ができました。
ありがとうございました。