実現したいこと
タイトルのエラーを回避したい。
発生している問題・分からないこと
ファイル生成は成功するのですが,なんかうまく終了しないので戦いましたが(もう何十時間もかかって
疲弊)ほんとに分からないです。(泣きたいです)
groupField がなくなったら,という処理がないような気がします。
なのでgroupFieldの空の行を掴んでエラーしている印象なのです。
現在は On Error GoTo myError で無理やり終了させてます..............
エラーメッセージ
error
1実行時エラー3021 カレントレコードがありません
該当のソースコード
Sub ExportGroupToCSV() Dim rs As DAO.Recordset Dim groupField As String Dim outputPath As String Dim sql As String Dim qdf As QueryDef ' グループ化するフィールド名 groupField = "GroupName" ' 出力先のフォルダパス outputPath = "C:\Output\" ' 出力先のフォルダを適切なパスに変更してください ' クエリのSQL文を構築 sql = "SELECT * FROM YourTable ORDER BY " & groupField ' クエリを作成 Set qdf = CurrentDb.CreateQueryDef("", sql) ' レコードセットを取得 Set rs = qdf.OpenRecordset ' レコードセットをグループ単位で処理 Do While Not rs.EOF ' グループごとにファイルを作成してデータを書き込む Dim groupValue As String groupValue = rs.Fields(groupField).Value ' CSVファイルに書き込む Open outputPath & groupValue & ".csv" For Output As #1 Print #1, "Header1, Header2, Header3" ' ヘッダー行を書き込む(適切なヘッダー名に変更してください)->不要 ' グループごとのデータを書き込む Do While Not rs.EOF And rs.Fields(groupField).Value = groupValue Print #1, rs.Fields("Field1").Value & ", " & rs.Fields("Field2").Value & ", " & rs.Fields("Field3").Value ' データ行を書き込む(フィールド名を適切なものに変更してください) rs.MoveNext Loop ' ファイルを閉じる Close #1 Loop ' レコードセットとクエリを解放 rs.Close Set rs = Nothing Set qdf = Nothing End Sub
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
グループごとにいったんテーブルに入れてcsv出力したりしましたが,
あとちょっとなのでこのソースがスルッと終われるならこれを使いたいです。
補足
特になし
> ' グループ化するフィールド名
> groupField = "GroupName"
フィールド[GroupName]のデータ型を明記されることをお奨めします。
ですよね,フィールド[GroupName]のデータ型がわかってません....
文字列だとは思いますが,コピペなもので....
すみません...
> フィールド[GroupName]のデータ型がわかってません
Access 上でテーブル[YourTable]をデザインビューで開いて確認なされば判るかと思います。
> ' グループごとにファイルを作成してデータを書き込む
> Dim groupValue As String
> groupValue = rs.Fields(groupField).Value
少なくとも、もしフィールド[GroupName]の値が Null であるレコードがテーブル[YourTable]に1件以上存在した場合、そのレコードの[GroupName]の値( Null )を String 型の変数 groupValue に代入しようとすれば、実行時エラー 94 が発生することになるでしょう。
ありがとうございます。
短いテキスト型,つまりはStrings型です。
なるほど,代入しようとしたって型が違いますよ,ということですね。
Do While Not rs.EOF And rs.Fields(groupField).Value = groupValue を
Do While Not rs.EOF 'And rs.Fields(groupField).Value = groupValue にしたら
ファイル化はされました!
でもグループごとでなくなりました..........................................
chat gpt君がソース吐き出したときは感激したんですが...
回答3件
あなたの回答
tips
プレビュー