プロが教えるわが家の防犯対策術!

よろしくお願いします。
クエリのデータをフォームで表示し、その時にコンボボックスで表示するデータを指定し抽出・表示しています。([授業名]フィールドのコンボボックスで、指定した授業のみ抽出します)
最終的に抽出したデータを、コマンドボタンでエクスポートできるようにしたいのですが、私の記述方法では「全てのクエリのデータ」がエクスポートされてしまいます。
どのような方法でもいいのですが、指定したデータ([授業名])のみエクスポートする方法はないでしょうか・・・?

*データエクスポートのVBA記述内容*
Private Sub cmdデータ出力_Click()
'名簿データのエクスポート
Dim msg As String
msg = MsgBox("名簿データを出力します。", vbYesNo, "出力確認")
If msg = vbYes Then
'どの場所にデータをエクスポートするか指定
DoCmd.TransferSpreadsheet acExport, , "Q_受講者名簿用", _
"Y:\○○課\住所録データエクスポート場所\" & "受講者名簿【ACCESSより】.xls", True
answer = MsgBox("受講者名簿データを出力しました", vbOKOnly, "データの出力の確認")
cancel = True
End If
End Sub

*ちなみに、フォーム上でフィルターをかけたVBAは*

Private Sub cmd名簿_Click()
Dim stList As String
Dim stFil As String
If combo1 <> "" Then
stFil = "[授業名]='" & combo1 & "'"
End If
Me.Filter = stFil
Me.FilterOn = True
End Sub

A 回答 (3件)

フォームで絞り込めているのでしょ


だったら同じしぼりこみをするクエリを作るだけです

それともクエリの作り方がわからないということですか?

クエリで授業名フィールドの抽出条件欄に

=Forms!フォーム名!コンボボックス名

と書けばフォームと同じ絞り込みができます
    • good
    • 0
この回答へのお礼

再度のご回等ありがとうござました!解決しました。
やりたいことができました!!
なんだか難しく考えすぎていたようで。。。
本当にありがとうございました。

お礼日時:2008/09/24 17:23

いろいろ書いていますが要は「Q_受講者名簿用」を出力しているだけですね


ということはこのクエリがご希望のものでないというだけではないですか

〉[授業名]フィールドのコンボボックスで、指定した授業のみ抽出します
クエリでもこの抽出を指定してやればいいだけのことだと思いますけど

この回答への補足

ご意見ありがとうございます。
回答に補足をさせて頂いて再度ご意見いただければ幸いです。

「Q_受講者名簿用」のデータを出力していることになります。
データ量が多く(レコード件数30000くらい)、また、その時々で呼び出したいレコードは様々です。
レコードの内容は「講座内容」「受講者番号」「受講者氏名」くらいですが。講座の数が50くらいあるので、「●●講座の受講者名簿データ」が必要ということになるのです。フォーム上ではできてもデータとしてエクスポートできないので困っております。

私が現在試行錯誤している方法以外で、ユーザーが「講座内容」をコンボボックスで選択して、選択した講座内容のみの名簿データをエクスポートする方法があれば、教えていただければと思います。
どうぞよろしくお願いいたします。

補足日時:2008/09/23 20:53
    • good
    • 0

いろいろ方法として、考えられますが・・・



DAO等で、出力用のクエリを一時的に作成するとか
DAO等で、直接Excelに書き込み、保存を掛けるとか

例えばの話だから、他にも考えられないことは無いけど・・・
Excelへ直接テーブルを書き込む場合ね

Private Sub Excel_Export()

Dim xlApp As Excel.Application
Dim DAOrs As DAO.Recordset
Dim DAOfd As DAO.Field
Dim usSQL As String
Dim usRow As Long
Dim usCol As Long

DoCmd.Hourglass True
' usSQLを書き換えることによって、何とでも可
usSQL = "Select * From Q_受講者名簿用 Where [授業名]='" & combo1 & "';"

Set xlApp = CreateObject("Excel.Application")
Set DAOrs = CurrentDb.OpenRecordset(usSQL)

With xlApp
' 出力用Excel新規作成
.Workbooks.Add
' 出力用Excel表題作成
usCol = 1
For Each DAOfd In DAOrs.Fields
.ActiveSheet.Cells(1, usCol) = DAOfd.NAME
Select Case DAOfd.Type
Case dbDate
.ActiveSheet.Columns(usCol).NumberFormat = "yyyy/mm/dd"
Case dbInteger, dbLong
.ActiveSheet.Columns(usCol).NumberFormat = "#,##0"
Case Else
.ActiveSheet.Columns(usCol).NumberFormat = "@"
End Select
usCol = usCol + 1
Next DAOfd
' 出力用Excelリスト作成
usRow = 2
While Not DAOrs.EOF
usCol = 1
For Each DAOfd In DAOrs.Fields
.ActiveSheet.Cells(usRow, usCol) = DAOfd.Value
usCol = usCol + 1
Next DAOfd
usRow = usRow + 1
DAOrs.MoveNext
Wend
' 閲覧用Excel整え
.Range("A2").Select
.ActiveWindow.FreezePanes = True
.Cells.Columns.AutoFit
.Cells.Rows.AutoFit
.Visible = True
End With

Set xlApp = Nothing
Set DAOrs = Nothing
DoCmd.Hourglass False

End Sub

って、感じ・・・エクセル上での表示書式や色々整えてるから、余分なところが多いかもしれないけどね

この回答への補足

ご回答ありがとうございます。
まだまだ勉強不足の私には、上記の内容をどのように扱えばいいかちょっと迷ってしまっています。申し訳ないです。
>出力用のクエリを一時的に作成するとか
具体的にどのような方法かご回答頂ければ嬉しいです。

できればエクセルの方にVBAを記述する方法ではなく、ユーザーが普段使用するアクセスでVBAを記述できているほうがいいので、アクセスで希望した「授業名」のみのデータをエクセルに出力する方法があれば、教えていただければと思います。よろしくお願いいたします。

補足日時:2008/09/23 21:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A