- ベストアンサー
(Access)コンボックスの値を指定する方法
Access2000にて現在、各部署別の勤怠データベースを作成しています。 その中で特定部署名をコンボックスで選択してその部署の勤怠データだけ抽出し、エクセルファイルへ出力する様にしたいのです。この場合、コンボックスで指定した 部署名をファイル名にして出力する場合はどの様にすれば良いでしょうか? 例えば、コンボックスで 部署名 ”東京営業部” と 選択したら抽出後、出力するファイル名は ”東京営業部.xls” として、並びにシート名は ”東京営業部”として 出力したいのです。 お手数ですが何卒よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
質問日時がだいぶ前なので既に解決されているかもしれませんが・・・ VBAを使う方法になってしまいますが、 コンボボックス名は仮に「コンボ0」とし、以下のような感じでどうでしょうか。 (コンボボックスの変更時イベントあたりに埋め込むのが良いかと思います) Private Sub コンボ0_Change() Dim db As DAO.Database Dim rs As DAO.Recordset Dim tbsql As String Dim xlapp As Object Dim xlbook As Object Dim i As Long '抽出条件の設定 tbsql = "select * from テーブル名 where [部署名] ='" & コンボ0.Value & "';" Set db = CurrentDb Set rs = db.OpenRecordset(tbsql) 'エクセルを起動 Set xlapp = CreateObject("excel.application") xlapp.Visible = True xlapp.ScreenUpdating = False '新規ブックを追加し、抽出した内容を出力 Set xlbook = xlapp.Workbooks.Add With xlbook For i = 0 To rs.Fields.Count - 1 '1行目にフィールド名を出力 .Sheets(1).Cells(1, i + 1) = rs.Fields(i).Name Next .Sheets(1).range("A2").CopyFromRecordset rs 'A2セル以降にデータを出力 .Sheets(1).Name = コンボ0.Value 'Sheet1の名前を変更 .Sheets(2).Delete 'Sheet2を削除(このあたりは不要な処理なら削って下さい) .Sheets(3).Delete 'Sheet3を削除 End With 'コンボボックスの値をファイル名とし保存 xlbook.SaveAs "c:\フォルダ名\" & コンボ0.Value & ".xls" xlapp.ScreenUpdating = True rs.Close db.Close End Sub
その他の回答 (1)
- oka_me
- ベストアンサー率86% (26/30)
補足に対しまして・・・ テーブル名の指定部分はクエリ名ではなく、そのクエリの元になっているテーブル自体の名前を指定して下さい。 「select * from~」の箇所の一文でそのままパラメータクエリ同様の役割をしてくれますので。 恐らくそれが原因かとは思いますが、もしそれでも駄目なようなら再度補足願います。。
お礼
重ね重ねご回答有難うございました。 tbsql = "select * from テーブル名 where [部署名] ='" & コンボ0.Value & "';" の箇所については、上記構文どおり クエリの元となる テーブルを指定した所 エラー表示はなくなりました。 本当に有難うございました。
補足
ご回答ありがとうございました。 早速、テーブル名の所に設定するクエリ名を指定し、実行したのですが "実行時エラー3601 パラメーターが少なすぎます。1を指定してください" とメッセージが出力されます。 元となるクエリは今回、フォーム”抽出”のコンボックス”コンボックス0” から ”部署名”を指定し、該当の”部署名”だけのデータを抽出する パラメータクエリになっております。 エラー箇所は ”Set rs = db.OpenRecordset(tbsql)” の所ですが 上記に何か設定を施せばエラーが無くなりますでしょうか。 重ねてお手数ですがご存じであればお教え願います。 上記の件、お手数ですがよろしくお願い致します。