- ベストアンサー
ACCESSクエリでのインポート時に、パラメタ手入力を無くしたい
ACCESSクエリでのインポート時に、パラメタ手入力を無くしたい 現在Excelファイルを読み込み、同じフィールドを持つアクセス内のテーブルに読み込んでいるのですが、Excelファイルの内容が不正な場合でもエラーが発生せず、パラメタを手入力する画面が表示されてしまいます。 おそらくアクセスの仕様だと思うのですが・・・。 Excelファイルの中身が想定と違う場合は「リードエラーです。」と表示したいのですが、何か良い方法は無いでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VB エクセル シート 読み込み の 4つのキーワードがあればサンプルはあります。この多くは読み込みさせる例であって書式が崩れている対処まであるかどうか。 崩れている対処は、 そもそも選ばれるファイルが違うならファイル名に規則性もたすか、ファイルは毎度同じインポート専用とするか、フォルダを決めるくらいの工夫をする。 エクセルを使っていながら書式が崩れるというのは列が10列が11列になっているとか想定されるが、そういう考えられるケースを洗い出し、具体的に観点1つずつチェック入れるのはけっこう大変。最初はできたかできなかったか程度にしておく。 チェック用と通常インポート用とボタン2つにする。 か、 ボタン1つでチェックと通常と一緒にやる。 イベントはどうするか。 自作でインポート記述して1レコードずつチェックするなら、 EOFになるまでのLOOPをチェック用と通常インポート用と2回行う、チェック用が正常かどうかで後続LOOPを決める。 か LOOP1回でチェックとインポートを一緒にやる。エラーがあればインポートで書き出してしまった分のレコードは削除する。 ロジックもいろいろあります。 エラー、訂正、読込、またエラー、また訂正、読込、正常。 とするか、 エラー全部で2こ発見、訂正、読込、正常。 とするか。運用もいろいろあります。 3番目の策前提ですが、構想を整理して見て下さい。
その他の回答 (3)
- layy
- ベストアンサー率23% (292/1222)
書式が崩れている場合、と 入っている値が想定範囲外の場合、と少なくとも2通りあるはず。 前者はそもそも前提がくずれているので 入力される箇所を強化すべき。 後者は入力値そのままなのか、何か計算式で求まるものなのか、 その行(レコード)単位?で不正分をスキップして続行しても良いのか、 ファイル単位でしなければならないものなのか、 これらによっても、いろいろ対処が分かれてきます。 ----------------- 「ACCESSクエリでのインポート時」というのが不明。 エクセルでインポートしているデータがテーブルにあって、 そのテーブルから他のテーブルへ書き出すクエリの実行時に 入力ガイドが現れる、原因はエクセルからのデータであることは確認済、 ということと解釈しましたが・・・。
補足
返信ありがとうございます。 説明不足で申し訳ありません・・・。 >書式が崩れている場合、と入っている値が想定範囲外の場合 書式が崩れている場合を想定しています。 あくまでフィールド名や中身が表ですらない場合にエラーメッセージを表示したいので・・・。 >「ACCESSクエリでのインポート時」というのが不明。 ボタンを押すとVBA中でクエリが呼び出され、そのクエリでエクセルファイルの表(最初のシートの内容のみ)をテーブルに取り込んでいます。 フィールド名はどちらも同じなので、レコードを追加しているようなイメージです。 現在はExcelファイルの書式が正しい場合は問題なく取り込めています。 DB接続先をExcelファイルのSheet1にしてSELECT文で取り出しています。
- imogasi
- ベストアンサー率27% (4737/17069)
自分でACCESSのモジュールにプログラムを書いて、テーブルへの読み込みに、エクセルのデータを読む部分を加えてテーブルにデータをセットしたら。 WEB上にはACCESSVBAでエクセルシートデータを読むコードなどアクサン見つかる。 http://www.nurs.or.jp/~ppoy/access/access/acM002.html などそういう処理だ。 ーーー >アクセスの仕様だと思うのですが・ そもそもMSアクセスは、基本的に、画面操作の手順の体系だ。 操作で回避手段(設定など)が無ければ、そういう場合VBAでも使わないと、違ったことは出来ないと思う。 ーーー >中身が想定と違う場合は これは具体的には、どういう場合なのか、か例示するのが、質問の作法では。
補足
参考サイトの提示ありがとうございます。 説明が不足していたのですが、一応クエリ呼び出しにVBAを使用しているのでそのサイトを参考に少しコードをいじってみようと思います。 >中身が想定と違う場合 申し訳ありません、これも説明が不足していました。 本来の中身は一行目がフィールド名になっている普通の表です。 これがただの文章だったり、フィールド名が違っていた場合にエラーを出したいと思っています。 今後は具体例を挙げるよう気をつけます。
- layy
- ベストアンサー率23% (292/1222)
いずれもVBAを使う。 EXCEL側で保存するとき整合性チェックをかける 保存されたブック(かCSV)に対して整合性チェックをかける ACCESSでインポートするときVBAで整合性チェックをかける 正常時実際のインポート、エラー時何もしない 大きくこの3点のどれかと思います。 今のところはACCESSのインポートで機能追加と いったところでしょう。 エラーが検知しやすいところで考える手もあります。
補足
アドバイスありがとうございます・・・。 それと、説明不足ですみません。 説明を補足させて頂きますと、今自分が作成したのはVBA中でクエリを呼び出してExcelのシートに書かれている表を読み込み、同じフィールド名を持つACCESSテーブルの表にレコードを追加するという処理です。 おそらく3番目のVBA整合性チェックをすれば何とかなりそうな気がします。 詳しい方法か、時間が無ければ参考サイトだけでも教えて頂けるとありがたいです。
お礼
うーむ、なるほど・・・。 色々なやり方があるのですね。 ひとまず教えていただいたLOOPを使う方法を調べてみようと思います。 エラーが起こらないというのはアクセスも結構やっかいですね・・・。 アドバイスありがとうございました!