Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


251 / 2272 ツリー ←次へ | 前へ→

【12404】AccessVBAからExcelファイルへの貼り付けについて nemutai 13/8/21(水) 15:48 質問[未読]
【12405】Re:AccessVBAからExcelファイルへの貼り付... かるびの 13/8/22(木) 2:04 回答[未読]
【12406】Re:AccessVBAからExcelファイルへの貼り付... nemutai 13/8/26(月) 15:16 質問[未読]
【12407】Re:AccessVBAからExcelファイルへの貼り付... かるびの 13/8/27(火) 1:36 回答[未読]

【12404】AccessVBAからExcelファイルへの貼り付け...
質問  nemutai  - 13/8/21(水) 15:48 -

引用なし
パスワード
   AccessのVBAで、クエリのデータをファイルへ貼り付けようとしているのですが、
貼り付けが上手くできず困っております。

下記のソースを使って週ごとのデータを出力しようとしています。
ですが、
一部の期間のみ貼り付けができ、他はできない状態です。
エラーもでず、マクロ自体は正常終了しています…。
出力できる週はいつ実行しても動作し、他はいつやっても出来ません。

ちなみに、
クエリを直に動かすときちんとデータが出力されます。
(レコード数は0件ではありませんし、出力される週より少ない場合もあり。)

お心当たりあればアドバイス頂ければ幸いです。


↓↓↓ 以下、VBAのコードです。 ↓↓↓

Private Sub 出力ボタン_Click()

'DBオブジェクト
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = Nothing
Dim qd As DAO.QueryDef

'Excelオブジェクト
Dim objEXE As Object
Set objEXE = Excel.Application
Dim objBOOK As Excel.Workbook
Dim objMacroBOOK As Excel.Workbook

'■■■■■■■■■ 処 理 開 始 ■■■■■■■■■

'Excel画面表示
objEXE.Visible = True

'Excelファイルのオープン
Set objBOOK = objEXE.Workbooks.Open("C:\xxx\出力ファイル.xls", 0, False, 1, "******")

'データ取得
Set qd = db.QueryDefs("クエリ1") 'クエリ指定
qd.Parameters("[期間_開始日]").Value = #2013/08/01#
qd.Parameters("[期間_終了日]").Value = #2013/08/04#
Set rs = qd.OpenRecordSet() 'データを抽出

'指定セルに貼り付け
objBOOK.Worksheets("Sheet1").Range("$A$1").CopyFromRecordset rs

'ファイルクローズ(上書き保存)
objBOOK.Close saveChanges:=True

'外部プログラム(Excel)終了
objEXE.Quit

'オブジェクト解放
Set rs = Nothing
Set db = Nothing
Set qd = Nothing

'完了
MsgBox "完了"

End Sub

【12405】Re:AccessVBAからExcelファイルへの貼り...
回答  かるびの  - 13/8/22(木) 2:04 -

引用なし
パスワード
    コードを見る限り、このコードを何月何日に実行しても、
2013年8月1日から2013年8月4日までのデータしか
エクセルには出力されないと思います。
 「クエリ1」がどんなクエリなのかわからないので、決定的なことは言えませんが、
おそらく原因はこのコードだと思います。
>qd.Parameters("[期間_開始日]").Value = #2013/08/01#
>qd.Parameters("[期間_終了日]").Value = #2013/08/04#

 ここで設定している日付を、その都度変えられるようなフォーム設計にする必要が
あると思います。
 具体的には、フォームに非連結のテキストボックスを配置し、
そのテキストボックスのValueプロパティの値を上記の日付に設定するとか。

【12406】Re:AccessVBAからExcelファイルへの貼り...
質問  nemutai  - 13/8/26(月) 15:16 -

引用なし
パスワード
   ご回答ありがとうございます。
お返事遅くなり申し訳ありません。

 >おそらく原因はこのコードだと思います。
 >>qd.Parameters("[期間_開始日]").Value = #2013/08/01#
 >>qd.Parameters("[期間_終了日]").Value = #2013/08/04#
こちら、都度手打ちで変更していたのですが、
ご指摘のようにフォームを作成し
そちらで入力するようにしてみました。
(紛らわしくてすみません。)

ですが、変わりなくエクセルは空のままでした…。
ブレークポイントを置いて確認してみたところ、
開始日終了日の値の受け渡しはできているようです。


重ねての質問で申し訳ないのですが、
ご回答を見て
クエリの方に問題があるのかもしれないと思いました。

確かめる方法はありますか??

【12407】Re:AccessVBAからExcelファイルへの貼り...
回答  かるびの  - 13/8/27(火) 1:36 -

引用なし
パスワード
   >クエリの方に問題があるのかもしれないと思いました。
>
>確かめる方法はありますか??


 とりあえず、Set rs = qd.OpenRecordSet() の次の行に
    Msgbox "rsのレコード数:" & rs.RecordCount
と入れて、コードを実行してください。
 レコードセットに格納されているレコード数がメッセージボックスに表示されます。


 もう少し詳しく知るには、上記の
    Msgbox "rsのレコード数:" & rs.RecordCount
を消し、
 Set rs = qd.OpenRecordSet() の次の行に
   With rs
     Do Until .Eof = true
       Debug.Print !フィールド名.Value _
            & "," & !フィールド名.Value _
            & "," & !フィールド名.Value 
       .MoveNext
     loop
   End with
と入力してください。
 なお、「フィールド名」には、「クエリ1」のフィールド名を入れてください。
 次に、VBEのメニューから「表示」→「イミディエイト ウィンドウ」を選択して
イミディエイト・ウィンドウを開いてください。
 そして、コードを実行すると、レコードセットに格納されているレコードが
イミディエイト・ウィンドウに表示されます。


 ただ、抽出条件を入力するテキストボックスを設けたのであれば、
「クエリ1」を変えてしまったらどうでしょうか。
 テキストボックスが配置されたフォームがF検索だとし、
テキストボックスの名前がそれぞれ txtBigin と txtEnd だとして、
クエリ・ビルダにおいて、
「クエリ1」の日付のフィールドの抽出条件欄に
   Forms!F検索!txtBigin.Value Between Forms!F検索!txtEnd.Value
と書いて、「クエリ1」を保存し、
txtBiginとtxtEndに適宜値を入力し、「F抽出」を開いたまま「クエリ1」を開けば、
所要の絞り込みがなされた状態でレコードが表示されるはずです。
 この「クエリ1」のレコードセットを取得して、
CopyFromRecordsetに渡してやればいいです。
 こうすれば、Parameterオブジェクトを使う必要がないですし、
「クエリ1」においてきちんとレコードが抽出されているか確認しやすいと思います。

251 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free