- 締切済み
【ACCESS】コマンドにVBAで動作をつけたい
ACCESS2010使用をしています。 ACCESS使用歴はまだ数カ月と、初心者でございます。 フォームに作成したコマンドに色々な動作をさせたいと思っています。 付けたい動きは比較的単純だと思うのですが、 検索してもなかなかヒットせず、VBAで作成してみても、動いてくれません;_; お力をお貸し頂けると助かります。 以下にやりたい事を羅列いたしました。 【コマンド1をクリックすると】 指定のエクセルブックを開く 【コマンド2をクリックすると】 既存の更新クエリを"デザインビュー"で開く (都度、中身を変えたいのでクエリを実行するのではなく、書き換えられるようにしたい) 【コマンド3をクリックすると】 既存の指定テーブルへ指定したエクセルブックをインポートをする (指定のフォルダのから、インポートするエクセルブックを選択出来るようにしたい) ≪ 流れ(イメージ)は以下の通りです≫ コマンド3をクリック→指定のフォルダダイアログボックスが表示される →エクセルブックを選択→インポート 説明不足の箇所がございましたすみません。 ご不明点等ございましら追記致します。 どうぞ、お知恵をお貸しくださいm(__)m
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- NotFound404
- ベストアンサー率70% (288/408)
マナー的にあれこれと一緒に質問されるのは如何なものかとおもいます。 ※それぞれが相互に関連しあっている場合、 Q1、Q2・・・ で今回はQ1についての質問。 というようなことでしたら、 まともな回答者はQ2以降も考慮しつつQ1について回答するか あるいは、適切にリードしてくれるかと思います。 今回に限り、回答してみます。 【コマンド1をクリックすると】 指定のエクセルブックを開く 開くだけでしたら、クリック時イベントに Createobject("shell.application").shellexecute "エクセルファイルのフルパス" が簡単でよろしいかと思います。 If Dir("e:\temp\test.xlsx") ="" then Msgbox "ファイルが見つかりません" exit sub end if Createobject("shell.application").shellexecute "e:\temp\test.xlsx" 開いた後であれこれと自動的に何かをExcelファイルに行いたい場合は オートメーションで処理することになります。 http://www.nurs.or.jp/~ppoy/access/access/acX006.html 【コマンド2をクリックすると】 既存の更新クエリを"デザインビュー"で開く (都度、中身を変えたいのでクエリを実行するのではなく、書き換えられるようにしたい) Docmd.OpenQuery "クエリ名",acViewDesign,acEdit で開きます。 【コマンド3をクリックすると】 ファイルの選択には標準モジュールに Function MyFilePicker() As String Dim Dlg As Object Const msoFileDialogFilePicker As Integer = 3 '4 Set Dlg = Application.FileDialog(msoFileDialogFilePicker) With Dlg .InitialFileName = "E:\Temp" '初期検索先フォルダ指定 .AllowMultiSelect = False '複数ファイル選択の許可 .Filters.Clear 'ファイルフィルタの設定 .Filters.Add "すべてのファイル", "*.*" .Filters.Add "Excelファイル", "*.xls;*.xls?" .FilterIndex = 2 '初期選択フィルタの設定 .ButtonName = "決定" 'ボタンの表示文字列の設定 'キャンセル時にはShowメソッドは0(Long型)を返す If CBool(.Show) Then '選択ファイルのパスの取得 MyFilePicker = .SelectedItems(1) Else MyFilePicker = "" End If End With End Function というのを作成しておいて コマンド3のクリック時イベントに Dim MyFile as string If MyfilePicker = "" then Exit Sub else myfile=MyfilePicker End if Docmd.TransferSpreadsheet acImport,acSpreadsheetTypeExcel12Xml,"新テーブル",myfile,true,"sheet2!" のようにしておくと上記の例では Excel2007以降のファイル(acSpreadsheetTypeExcel12Xml)が テーブル名が"新テーブル" myfilepicker で選択したファイル フィールド名(カラム名)付きで、true sheet2 のデータ(指定していなければ一番左のシート)が インポートされます。(Office2010 では。2013は不明です。) 以上粗々とした説明ですので、実際には 誰か(貴方や隣の人)が既にExcelファイルを開いている場合、 Excelファイルの形式(xls,xlsx,xlsm)による分岐処理 既存テーブルへの追加、既存テーブルのレコード削除後の追加、 Excelファイル内に不適当な部分(データ型が異なるモノが紛れ込んでいる、セルの結合・・・) などの対処が必要になる場合が考えられます。 VBAの意味はそれぞれの語句にカーソルを持って行って、F1 キー (ヘルプ)で調べてください。 なお、いまさら言うなよ!と叱られそうですがIME2010のバグのため http://okwave.jp/qa/q8494169.html のように、MyFilePicker でも 『決定』ボタンを二回クリックしないと進みません。 その際は、hatena さんの WIZHOOK 使用バージョンで! 私からは以上です。