Access パラメータをVBAで渡してクエリを実行

CSVファイルを出力するのに、クエリにパラメータを設定すると、入力を求められる。
めんどくさいので自動化したい。その時の物です。
エクスポートの定義は手動でやらないとダメですね。

Private Sub web_output_Click()

Const TBL_NAME = “web_pdf_output”
Const RPT_NAME = “repo_web_pdf_output”
Const TBL_NAME0 = “web_pdf_output0”
Const RPT_NAME0 = “repo_web_pdf_output0”
Const PDF_PATH = “D:\NTT\”

Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset

Dim rs0 As ADODB.Recordset
Set rs0 = New ADODB.Recordset

Dim dbs As Database
Dim qdf As QueryDef

Dim myStr As String

DoCmd.SetWarnings False
DoCmd.OpenQuery “repo_all_chage_pdf”, acViewNormal
DoCmd.OpenQuery “repo_all_chage_pdf0”, acViewNormal

Do While True
myStr = InputBox(“yyyymmの形式を入力してください。”)

‘—(1)キャンセルしたとき
If StrPtr(myStr) = 0 Then
MsgBox “キャンセルします”
Exit Sub

‘—(2)空欄のまま[OK]したとき
ElseIf myStr = “” Then
MsgBox “未入力です”, vbExclamation

‘—(3)入力文字が6文字より長いとき
ElseIf Len(myStr) > 6 Then
MsgBox “文字が長すぎます”, vbExclamation

Else
‘—(4)入力文字が6文字以内のとき
MsgBox “入力された文字列は「” & myStr & “」です”
GoTo Nextjob
End If
Loop

Nextjob:

Rs.Open “SELECT DISTINCT FID FROM web_pdf_output”, CurrentProject.Connection, adOpenStatic, adLockReadOnly

Do Until Rs.EOF

DoCmd.OpenReport RPT_NAME, acViewPreview, , “FID=” & Rs!FID, acWindowNormal
DoCmd.OutputTo acOutputReport, RPT_NAME, acFormatPDF, PDF_PATH & Rs!FID & “0000” & myStr & “.PDF”
DoCmd.Close
Rs.MoveNext
Loop

rs0.Open “SELECT DISTINCT ID FROM web_pdf_output0”, CurrentProject.Connection, adOpenStatic, adLockReadOnly

Do Until rs0.EOF

DoCmd.OpenReport RPT_NAME0, acViewPreview, , “ID=” & rs0!ID, acWindowNormal
DoCmd.OutputTo acOutputReport, RPT_NAME0, acFormatPDF, PDF_PATH & rs0!ID & myStr & “.PDF”
DoCmd.Close
rs0.MoveNext
Loop
rs0.Close

DoCmd.SetWarnings False
DoCmd.DeleteObject acTable, “web_renkei_csv”
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs(“output_web_data”)
With qdf
.Parameters(“tsuki”) = myStr
.Execute
End With

DoCmd.TransferText _
TransferType:=acExportDelim, _
specificationname:=”Web_renkei_csv エクスポート定義”, _
TableName:=”web_renkei_csv”, _
FileName:=”D:\NTT\webdatajoy_” & Format(Date, “yyyymmdd”) & “.txt”

End Sub

Access エクスポート時の日付時間のフォーマット

アクセスからcsvファイルをエクスポートした時に、時間フィールドをエクスポートすると、

2016/01/25 00:00:00 のように時間までついてくる。さらに、yyyy-mm-ddの形式にしたいと思っているができなかった。

できるようにするには、まず、csv出力させたいテーブルを普通に選択クエリーを作成して、日付のフォーマットを
Format([日付],”yyyy-mm-dd”)のようにする。かってに、式1: Format([転出解約日],”yyyy-mm-dd”)のような形式に変換されますが、気にせずにそのままに。

そのクエリーをエクスポートかければ、出力させたい形式になる。

Access TSVファイルの出力

TSVファイルって何?

CSVファイルのタブ区切り版のようだ。そのようなCSVファイルをどうやって出力したらいいのだろうか?

フォームに適当なボタンを作成して、下記のようなVBAを実行させればいいようだ。

個配指示データというテーブルをTSVファイルに出力する例をあげている。個配指示というボタンをクリックすると実行される。

Private Sub 個配指示_Click()

DoCmd.TransferText _
TransferType:=acExportDelim, _
TableName:=”個配指示データ”, _
FileName:=”D:\test\kohaishiji_DDDAAA_” & Format(Date, “yyyymmdd00”) & “.txt”

End Sub

※上記の例では、kohaishiji_DDDAAA_2016012000.txtってファイルを作成するように設定(日付20160120)

しかーーーーし、これでは、カンマ区切りの状態になる。調べて調べて、

適当なテーブルをクリックして、外部データ>>エクスポート>>テキストファイル を選択
データのエクスポート先の選択とかでるが、気にせずに、OK
そうすると、カンマ区切りの表示がでるので、設定をクリックして、エクスポート定義ってのでタブ区切り等の設定をする。保存を押すと、定義名を変更できるようになるので、定義する。

その定義分を付け加えてやればいい。

Private Sub 個配指示_Click()

DoCmd.TransferText _
TransferType:=acExportDelim, _
specificationname:=”個配指示データ エクスポート定義”, _
TableName:=”個配指示データ”, _
FileName:=”D:\test\kohaishiji_DDDAAA_” & Format(Date, “yyyymmdd00”) & “.txt”

End Sub