教えて下さい。
ACCESSであるテーブルのデータをCSV出力しようとして、以下のような記述をしました。
結果、問題なく出力されましたが、データだけでなく、項目も出力しようと考えています。
その際にはどのような記述をすれば良いでしょうか?
初歩的な質問で申し訳ありません。
教えて下さい。
《内容》
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim stSQL As String
Dim stTBL As String
Dim myWSH As Object 'WScript
Dim myDesktopPath As String
Dim stPath As String 'フルパス
Dim objFSO As Object 'FileSystemObject
Dim fsoTS As Object 'TextStream
Dim tmp As Variant 'データ
Dim re As Variant 'データ件数
Dim stDocName As String
Const ForAppending = 8
stTBL = "t_合算" 'テーブル名
'開始メッセージ
stDocName = "「" & stTBL & ".CSV」 ファイルをデスクトップに作成します"
If MsgBox(stDocName, vbYesNo) = vbNo Then Exit Sub
'デスクトップパス取得
Set myWSH = CreateObject("WScript.Shell")
myDesktopPath = myWSH.SpecialFolders("Desktop")
Set myWSH = Nothing
'フルパス
stPath = myDesktopPath & "\" & stTBL & ".CSV"
'読み取り専用でセット
Set cnn = CurrentProject.Connection
stSQL = "SELECT * FROM " & stTBL
Set rst = cnn.Execute(stSQL)
If rst.EOF Then
stDocName = "出力するデータがありませんでした"
Else
'文字列データ格納 (全データ出力、カンマ区切り)
tmp = rst.GetString(adClipString, , ",", vbNewLine)
'出力
Set objFSO = CreateObject("Scripting.FileSystemObject")
With objFSO
If .FileExists(stPath) Then
'既存ファイル削除
Call .DeleteFile(stPath)
End If
Set fsoTS = .OpenTextFile(stPath, ForAppending, True)
'文字列一括書き出し
fsoTS.WriteLine tmp
re = fsoTS.Line - 2
End With
Set fsoTS = Nothing: Set objFSO = Nothing
stDocName = re & " 件の CSVデータを出力しました。"
End If
MsgBox stDocName, vbOKOnly
No.1
- 回答日時:
出力用の仮テーブル作って、
transfertextをつかって、hasfieldnamesをtrueに設定する
のが簡単かな。
参考URL:http://www.feedsoft.net/access/tips/tips92.html
No.2
- 回答日時:
No.3ベストアンサー
- 回答日時:
rs.GetStringというのは初めて見ました。
ひとつ物知りになったお礼にフィールド名の取得を盛り込んでみました。フィールド名はループで個々に取得するしかなさそうです。
Accessお仕着せのオートナンバーフィールドのあるデータで試験したところ、エクセルに読み込む時にエラーになって悩みました。バイナリエディタまで引っ張り出してみても分からない...。結局CSVファイルの頭にID...という文字があると、エクセルはSYLKファイルと判断してエラーを出すという事が分かりました。強行すればCSVとして開く事は可能でしたが。
Sub test()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim stSQL As String
Dim stTBL As String
Dim stPath As String 'フルパス
Dim objFSO As Object 'FileSystemObject
Dim fsoTS As Object 'TextStream
Dim tmp As Variant 'データ
Dim re As Variant 'データ件数
Dim stDocName As String
Dim buf As String
Dim i As Long
Const ForAppending = 8
stTBL = "Table1" 'テーブル名
'開始メッセージ
stDocName = "「" & stTBL & ".CSV」 ファイルをデスクトップに作成します"
If MsgBox(stDocName, vbYesNo) = vbNo Then Exit Sub
'フルパス
stPath = myDesktopPath & "\" & stTBL & ".CSV"
'読み取り専用でセット
Set cnn = CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseClient
stSQL = "SELECT * FROM " & stTBL
rst.Open stSQL, cnn, adOpenForwardOnly, adLockReadOnly
If rst.EOF Then
stDocName = "出力するデータがありませんでした"
Else
re = rst.RecordCount
For i = 0 To rst.Fields.Count - 1
If buf = "" Then
buf = rst.Fields(i).Name
Else
buf = buf & "," & rst.Fields(i).Name
End If
Next i
'文字列データ格納 (全データ出力、カンマ区切り)
tmp = rst.GetString(adClipString, , ",", vbNewLine)
tmp = buf & vbCrLf & tmp
'出力
Set objFSO = CreateObject("Scripting.FileSystemObject")
With objFSO
If .FileExists(stPath) Then
'既存ファイル削除
Call .DeleteFile(stPath)
End If
Set fsoTS = .OpenTextFile(stPath, ForAppending, True)
'文字列一括書き出し
fsoTS.WriteLine tmp
End With
Set fsoTS = Nothing: Set objFSO = Nothing
stDocName = re & " 件の CSVデータを出力しました。"
End If
MsgBox stDocName, vbOKOnly
End Sub
Function myDesktopPath() As String
Dim myWSH As Object 'WScript
'デスクトップパス取得
Set myWSH = CreateObject("WScript.Shell")
myDesktopPath = myWSH.SpecialFolders("Desktop")
Set myWSH = Nothing
End Function
mitarashi様、返事が遅くまって申し訳ありません。
教えて頂いたように記述したところ、問題なく項目を出力する事ができました。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの時刻の形式について
-
accessでクエリをExcelにエクス...
-
ACCESS2002(or2003)の日付表示...
-
社員情報
-
ファイナルカットで編集した動...
-
VB6.0でExcel,PDF,Word出力方法
-
COBOL、項目末尾に空白がある場...
-
accessのリポートを、excelに出...
-
Thunderbird 受信メールからの...
-
フォルダ内のサブフォルダ名や...
-
Apacheのエラーログのログレベ...
-
コマンドプロンプトのテキスト...
-
EXCEL VBAでのCSVファイル読み...
-
AccessのレポートからPDFをペー...
-
HTMLテキストリンクでExcelファ...
-
includeで別サイトを読み込む
-
Excel VBAが徐々に遅くなる
-
VBAでフォルダ内の全てのcsv...
-
ATTファイルってどうやって開け...
-
C#で文字列リソースを扱う
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
コマンドプロンプトのテキスト...
-
COBOL、項目末尾に空白がある場...
-
Thunderbird 受信メールからの...
-
VB6.0でExcel,PDF,Word出力方法
-
ショートカットで起動した場合...
-
AccessのレポートからPDFをペー...
-
accessのリポートを、excelに出...
-
Acrobat参照設定
-
Excel で「OLE は現在使用でき...
-
ファイナルカットで編集した動...
-
WshShellから起動したbat(ftp)...
-
COBOL FILLER
-
エクセルが裏で動いたままなん...
-
Fortranでの出力ファイル
-
マクロについて質問です。 現在...
-
iTextでPDFを表示させたら日本...
-
TransferSpreadsheetでフルパス...
-
ACCESS2002(or2003)の日付表示...
おすすめ情報