前提・実現したいこと
Accessでクエリの結果をすでにあるエクセルファイルの指定したシート(入力用)に出力したい
発生している問題・エラーメッセージ
入力用$はすでに存在しています
該当のソースコード
Private Sub コマンド901_Click() Dim Path As String Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "\" & "見積書_草稿.xlsx" DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "見積書クエリ", Path, True, "入力用!" MsgBox "エクスポートされました" End Sub
試したこと
テーブルを任意のExcelシートへ出力する方法はソースを見つけて実現することができたのですが
そのソースコードではクエリの出力ができませんでした。
下記のコードでクエリが出力できるのが理想です。
Private Sub OutputTemplateExcel() Dim strsql As String Dim strTemplate As String Dim strFileName As String Dim xlapp As Object Dim myCn As New ADODB.Connection Dim myRs As New ADODB.Recordset Const csOutPutFileName = “C:\work\EXCEL出力” Const csOutputTemplate= “テンプレート.xlsx” On Error GoTo Err_Exit 'ファイル名作成 strFileName = csOutputFileName & "_" & Format(Date, "yyyymmdd") & ".xlsx" 'EXCELアプリケーションを起動 Set xlapp = CreateObject("Excel.Application") 'セットする過程が見えないよう一旦不可視 xlapp.Visible = False Set myCn = CurrentProject.Connection strsql = "SELECT * FROM 見積書クエリ" 'レコードセットオープン myRs.Open strsql, myCn, adOpenForwardOnly, adLockReadOnly With xlapp 'テンプレートを開く strTemplate = Application.CurrentProject.Path & "\" & csOutputTemplate 'テンプレートファイルが存在しないときはエラー If Dir(strTemplate) = "" Then MsgBox "テンプレートファイルを確認してください。", vbOKOnly + vbCritical, "エラー" .Visible = True .Quit Exit Sub End If 'テンプレートファイルオープン .Workbooks.Open strTemplate '結果値出力処理(1行目にヘッダーを表示しているので、2行目1列目からセット .Cells(2, 1).CopyFromRecordset myRs '完了したら保存 .ActiveWorkBook.SaveAs FileName:=strFileName MsgBox "出力しました。", vbOKOnly + vbInformation End With Set myRs = Nothing: Close Set myCn = Nothing: Close 'Excelを終了します xlapp.Quit Exit Sub Err_Exit: MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical, "OutputExcel()" Set myRs = Nothing: Close Set myCn = Nothing: Close xlapp.Quit End Sub
補足情報(FW/ツールのバージョンなど)
何卒よろしくお願いします。
前者のコード(DoCmd.TransferSpreadsheet)でも、後者のコード(CopyFromRecordset)でも、クエリの出力はできると思いますが、どのようにうまくいかないのでしょうか。
Set myRs = Nothing: Close
Set myCn = Nothing: Close
この部分は間違いですね。下記が正しいです。
myRs.Close: Set myRs = Nothing
myCn.Close: Set myCn = Nothing
Set myCn = Nothing
コメントありがとうございます。
前者のコードだとクエリ自体の出力はできるのですが、既存のエクセルファイル内への出力がうまくできません。
また後者のコードを実行すると
-2147217904:1つ以上の必要なパラメーターの値が設定されていません。
となってしまいます。
修正のコードに入れなおしても同じ結果でした・・・。
ちなみに
strsql = "SELECT * FROM 見積書クエリ"
この部分をクエリではなくテーブル名に直すと問題なく出力されるので、クエリで動かないのはなぜだと悩んでいます・・・。
