質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

受付中

AccessのVBAで、クエリの結果を既にあるエクセルファイルの指定したシート(入力用)に出力したい

veinte
veinte

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

2回答

0評価

1クリップ

5647閲覧

投稿2020/04/17 08:27

前提・実現したいこと

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/ツールのバージョンなど)

何卒よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hatena19
hatena19

2020/04/17 14:02 編集

前者のコード\(DoCmd\.TransferSpreadsheet\)でも、後者のコード\(CopyFromRecordset\)でも、クエリの出力はできると思いますが、どのようにうまくいかないのでしょうか。
hatena19
hatena19

2020/04/17 14:06

Set myRs = Nothing: Close Set myCn = Nothing: Close この部分は間違いですね。下記が正しいです。 myRs\.Close: Set myRs = Nothing myCn\.Close: Set myCn = Nothing Set myCn = Nothing
veinte
veinte

2020/04/18 04:19

コメントありがとうございます。 前者のコードだとクエリ自体の出力はできるのですが、既存のエクセルファイル内への出力がうまくできません。 また後者のコードを実行すると -2147217904:1つ以上の必要なパラメーターの値が設定されていません。 となってしまいます。 修正のコードに入れなおしても同じ結果でした・・・。
veinte
veinte

2020/04/18 04:20

ちなみに strsql = "SELECT \* FROM 見積書クエリ" この部分をクエリではなくテーブル名に直すと問題なく出力されるので、クエリで動かないのはなぜだと悩んでいます・・・。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。