Access VBA質問箱 IV

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

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


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

【8030】エクスポート処理時の条件範囲 あくせーす 06/6/23(金) 0:00 質問[未読]
【8031】Re:エクスポート処理時の条件範囲 クロ 06/6/23(金) 9:22 回答[未読]
【8048】Re:エクスポート処理時の条件範囲 あくせーす 06/6/26(月) 2:20 発言[未読]
【8050】Re:エクスポート処理時の条件範囲 クロ 06/6/26(月) 10:20 回答[未読]
【8072】Re:エクスポート処理時の条件範囲 あくせーす 06/6/27(火) 23:35 お礼[未読]
【8032】Re:エクスポート処理時の条件範囲 たん 06/6/23(金) 9:23 回答[未読]

【8030】エクスポート処理時の条件範囲
質問  あくせーす  - 06/6/23(金) 0:00 -

引用なし
パスワード
   エクスポートについて、以下の条件はどうすれば良いでしょうか。

エクスポートさせたくないフィールド:Password、個人情報にかかわるフィールド、etc
エクスポート処理について、[連休番号]フィールドが一番大きい数字40となっている
すべてのレコードと、エクスポートさせたくないフィールドを除くフィールドを
エクスポートしたいんですが、どのようなプログラムで
指定するのでしょうか・・?

連休番号  連休  User  Password  ・・・(略)
20     秋休み A    ***
20     秋休み B    ***
20     秋休み C    ***
30     春休み A    ***
30     春休み B    ***
30     春休み C    ***
30     春休み D    ***
40     夏休み A    ***
40     夏休み B    ***
40     夏休み C    ***
40     夏休み D    ***
40     夏休み E    ***
40     夏休み F    ***
40     夏休み G    ***

とする。

エクスポートすると、
連休番号  連休  User ・・・エクスポートしたいフィールド名
40     夏休み A
40     夏休み B
40     夏休み C
40     夏休み D
40     夏休み E
40     夏休み F
40     夏休み G

となる。

連休番号50を追加場合は、50を入れているレコード全部と、不要なフィールドを
除いたフィールドをエクスポートさせる。

単純にすべてのデータをエクスポートする場合は、TransferSpreadsheetをつかって、
エクスポート先(ExcelVar)、クエリ名(Q_Name)を使えば問題はないですが、上記条件の
場合はどのようにして行うのでしょうか?
すいませんが、どなたか分かる方、教えて下さい。

  If MsgBox(Massage, vbOKCancel, "確認") = vbOK Then
    '最初のデータをフィールド名として使う。
    DoCmd.TransferSpreadsheet acExport, _
          acSpreadsheetTypeExcel9, Q_Name, ExcelVar, True
    MsgBox "データ出力は、正常に完了しました。", , "完了"
  End If

【8031】Re:エクスポート処理時の条件範囲
回答  クロ  - 06/6/23(金) 9:22 -

引用なし
パスワード
   おはようございます。

Q_Nameをパラメータクエリにしてみては?
連休番号(数値型とします)に抽出条件を入れて、Passwordフィールドは
表示させないような…
以下例です。

PARAMETERS [連休番号を指定してください] Long;
SELECT 連休番号, 連休, User
FROM テーブル名
WHERE 連休番号=[連休番号を指定してください];

パラメータ部分をフォームのテキストボックス等を指定してもいいと思います。

【8032】Re:エクスポート処理時の条件範囲
回答  たん  - 06/6/23(金) 9:23 -

引用なし
パスワード
   >連休番号50を追加場合は、50を入れているレコード全部と、不要なフィールドを
>除いたフィールドをエクスポートさせる。

単に連休番号が一番大きいデータだけが必要なのであれば、

連休番号が一番大きいもののみ(他のフィールドはなし)の集計クエリを作成し、
Q_Nameと、集計クエリを連結させたクエリを新たに作り、エクスポートの対象として、
TransferSpreadsheetに指定すればいいだけかと。

(つまり、クエリを追加で2個用意しなさいという事。)

# いきなり答えだけ求めようとするから、わからなくなる。
# 順番立てて考えれば、クエリだけで出来るレベルと思う。

【8048】Re:エクスポート処理時の条件範囲
発言  あくせーす  - 06/6/26(月) 2:20 -

引用なし
パスワード
   ▼クロ さん:

ご回答を頂きまして、ありがとうございます。

ボタンクリックイベントに、SQL文でパラメータ用のクエリを一時的に作成し、エクスポートした後、
削除する形で対応してみましたが、パラメータが少なすぎる。1を指定してください。と
エラーが表示されてしまいます。

  Dim MyDb2 As DAO.Database
  Dim MyQd2 As DAO.QueryDef
  Dim MyTb2 As DAO.Recordset

  Dim strSQL2 As String
  Dim strQryName2 As String
  Dim varQryName2 As Variant

  '既存のクエリ名を指定する。
  strQryName2 = "Q_Name"
  '新規作成のクエリ名を指定する。
  varQryName2 = "Q_エクスポート用Name"

  Set MyDb2 = CurrentDb

  '同名のクエリは削除
  MyDb2.QueryDefs.Refresh
  For Each MyQd2 In MyDb2.QueryDefs
    If MyQd2.Name = varQryName2 Then
      MyDb2.QueryDefs.Delete MyQd2.Name
    End If
  Next MyQd2

  '新規クエリ作成
  strSQL2 = "SELECT 連休番号, 連休, User FROM Q_Name WHERE (((Q_Name.No_連休)=[]));"
  Set MyQd2 = MyDb2.CreateQueryDef(varQryName2, strSQL2)
  Set MyTb2 = MyQd2.OpenRecordset()

  If Not MyTb2.EOF Then
    strSQL2 = strQryName2 & " をExcelファイルへ出力します。" & Chr(13) & _
         "よろしければ、OKをクリックして下さい。"
  Else
    strSQL2 = "出力データがありません。処理を中止します。"
    MsgBox strSQL2, vbOKOnly, "通知"
    GoTo exit_qryToExcel
  End If

  If MsgBox(strSQL2, vbOKCancel, "確認") = vbCancel Then
    GoTo exit_qryToExcel
  End If

  '保存ダイアログ表示後出力
  'OutputTo での出力は Excel 5.0 の仕様の為、行数の上限が 16,384 行となる。
  DoCmd.OutputTo acQuery, varQryName2, acFormatXLS, , True
  'MsgBox "出力終了しました。", vbOKOnly

exit_qryToExcel:
<略>

err_qryToExcel:
<略>


>PARAMETERS [連休番号を指定してください] Long;
>SELECT 連休番号, 連休, User
>FROM テーブル名
>WHERE 連休番号=[連休番号を指定してください];

単純にQ_Nameをパラメータクエリとして作成し、連休番号20を入力すれば
番号が20のレコードかつ、不要なフィールドを除くフィールドを表示することは、
できるんですが、今回はフォームのボタンでエクスポートさせたいことです。

ただ、やりたい内容は下記です。

連休番号  連休  User  Password  ・・・(略)
20     秋休み A    ***
20     秋休み B    ***
20     秋休み C    ***
30     春休み A    ***
30     春休み B    ***
30     春休み C    ***
30     春休み D    ***
40     夏休み A    ***
40     夏休み B    ***
40     夏休み C    ***
40     夏休み D    ***
40     夏休み E    ***
40     夏休み F    ***
40     夏休み G    ***

とする。

エクスポートすると、
連休番号  連休  User ・・・エクスポートしたいフィールド名
40     夏休み A
40     夏休み B
40     夏休み C
40     夏休み D
40     夏休み E
40     夏休み F
40     夏休み G

となるんですが、

テーブルに連休番号50を追加するという場合も考慮したい。
その場合は連休番号が常に最大値の数値のみを抽出するクエリ用のSQL文を
記述(不要なフィールドも)するSQL文はどのように表現すればよいでしょうか?
上記のstrSQL = "" の中に記述すればよいですが・・・

サーバにテーブルを持たせて、各PCは配布ファイルを起動するので
プログラムで指定するのではなく、テーブルを参照するようにしたい。

分かる方、教えて下さい。

【8050】Re:エクスポート処理時の条件範囲
回答  クロ  - 06/6/26(月) 10:20 -

引用なし
パスワード
   おはようございます。

>  strSQL2 = "SELECT 連休番号, 連休, User FROM Q_Name WHERE (((Q_Name.No_連休)=[]));"

パラメータが空なのは何故?
Q_Nameクエリ内に「No_連休」というフィールドはあるのでしょうか?
単に「連休番号=パラメータ」でよいのでは?
それ以降のコードでレコードの存在をチェックして、OutputToで出力していますが、InputBoxを使ったほうがいいかもです。

Dim RN As Integerをしてから

strSQL2のところを

RN = InputBox("連休番号を指定してください")
strSQL2 = "SELECT 連休番号, 連休, User FROM Q_Name WHERE 連休番号=" & RN & ";"

でどうですか?

【8072】Re:エクスポート処理時の条件範囲
お礼  あくせーす  - 06/6/27(火) 23:35 -

引用なし
パスワード
   ▼クロ さん:

こんばんわ。
ありがとうございます。
下記でも可能ですが、テーブルやクエリを作成した側は連休番号は
何番を入れたら良いか分かると思いますが、一般ユーザは分からないので、
連休番号が一番大きい数字を指定する方法でやりました。

RN = DMAX("連休番号","Q_Name") に変更させて頂きました。
これですと、連休番号50を追加した場合も、50のレコードを抽出できるので
良いか、と思います。

>Dim RN As Integerをしてから
>
>strSQL2のところを
>
>RN = InputBox("連休番号を指定してください")
>strSQL2 = "SELECT 連休番号, 連休, User FROM Q_Name WHERE 連休番号=" & RN & ";"
>
>でどうですか?

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