Microsoft Office Access機能

フォームに抽出条件の年度と記録Noを入力してボタンをクリックすると、選択クエリでレコード抽出を行い、csv出力されるvbaを書いたのですが、
どこかが間違っており、出力されません。
恐縮ですがもし原因がお分かりでしたらお教え願います

Private Sub 出力ボタン_Click()

'宣言
On Error Resume Next
Dim zdb As DAO.QueryDef
Dim zrs As DAO.Recordset
Dim tdty As String
Dim tdtm As String

'年度、記録Noの取得
tdty = Me.年度
tdtm = Me.記録No

'クエリにパラメータを渡す
Set zdb = CurrentDb.QueryDefs("クエリ1")
zdb.Parameters("年度") = tdty
zdb.Parameters("記録No") = tdtm
Set zrs = zdb.OpenRecordset(dbOpenDynaset)

'csv出力
DoCmd.TransferText acExportDelim, , zrs, _
"C:\結果.csv", True, ""
DoCmd.DeleteObject acQuery, zrs

End Sub

回答の条件
  • 1人2回まで
  • 登録:2007/10/07 20:41:12
  • 終了:2007/10/14 20:45:03

回答(0件)

回答はまだありません

  • id:kn1967
    >>
    Set zdb = CurrentDb.QueryDefs("クエリ1")
    zdb.Parameters("年度") = tdty
    zdb.Parameters("記録No") = tdtm
    Set zrs = zdb.OpenRecordset(dbOpenDynaset)
    <<
    zdb や zrs は VBAが内部的に持っているオブジェクト。
    >>
    DoCmd.TransferText acExportDelim, , zrs, _
    "C:\結果.csv", True, ""
    <<
    DoCmdはVBAからマクロのコマンドを呼び出すもの。
    呼び出されたマクロ側からは”VBAが内部的に持っているオブジェクトは見えない”ので
    マクロは zrs が何の事だか、さっぱり判らない。

    >>
    On Error Resume Next
    <<
    完成直前の最終的動作テストまではコメント化しておかないと原因究明の支障となるだけ。
    これが書いてあるとエラーがあっても表示されないので
    どこが悪いかの手がかりすら掴む事が出来ない。

    対策としては
    パターン1)パラメータクエリではなく、その都度クエリ1をVBAで改造する
    Set zdb = CurrentDb.QueryDefs("クエリ1")
    zdb.SQL="ここにSQLを書く"
    DoCmd.TransferText acExportDelim, , "クエリ1", "C:\結果.csv", True, ""
    パターン2)DoCmd.TransferTextではなくVBAで1レコードずつ書き出す。
    print#を使うなど

    以上、ヒントだけなのでコメント欄で・・・。
  • id:keisuke738
    keisuke738 2007/10/08 11:25:05
    コメントありがとうございます。
    なるほど、そういうことだったのですか。

    大変恐縮なのですが、もし可能でしたら対策パターン1のSQL文を教えていただけないでしょうか。
    フォームの「年度」と「記録No」というテキストボックスに入力した値と一致するレコードを抽出するクエリ1を作りたいと考えています。
    自分で調べるべきなのですが、どうしても夜までに完成させなければいけないため、お力を貸していただけると光栄ですm(__)m

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません