• ベストアンサー

ACCESSクエリでのインポート時に、パラメタ手入力を無くしたい

ACCESSクエリでのインポート時に、パラメタ手入力を無くしたい 現在Excelファイルを読み込み、同じフィールドを持つアクセス内のテーブルに読み込んでいるのですが、Excelファイルの内容が不正な場合でもエラーが発生せず、パラメタを手入力する画面が表示されてしまいます。 おそらくアクセスの仕様だと思うのですが・・・。 Excelファイルの中身が想定と違う場合は「リードエラーです。」と表示したいのですが、何か良い方法は無いでしょうか?

  • L4D2
  • お礼率25% (1/4)

質問者が選んだベストアンサー

  • ベストアンサー
  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

VB エクセル シート 読み込み の 4つのキーワードがあればサンプルはあります。この多くは読み込みさせる例であって書式が崩れている対処まであるかどうか。 崩れている対処は、 そもそも選ばれるファイルが違うならファイル名に規則性もたすか、ファイルは毎度同じインポート専用とするか、フォルダを決めるくらいの工夫をする。 エクセルを使っていながら書式が崩れるというのは列が10列が11列になっているとか想定されるが、そういう考えられるケースを洗い出し、具体的に観点1つずつチェック入れるのはけっこう大変。最初はできたかできなかったか程度にしておく。 チェック用と通常インポート用とボタン2つにする。 か、 ボタン1つでチェックと通常と一緒にやる。 イベントはどうするか。 自作でインポート記述して1レコードずつチェックするなら、 EOFになるまでのLOOPをチェック用と通常インポート用と2回行う、チェック用が正常かどうかで後続LOOPを決める。 か LOOP1回でチェックとインポートを一緒にやる。エラーがあればインポートで書き出してしまった分のレコードは削除する。 ロジックもいろいろあります。 エラー、訂正、読込、またエラー、また訂正、読込、正常。 とするか、 エラー全部で2こ発見、訂正、読込、正常。 とするか。運用もいろいろあります。 3番目の策前提ですが、構想を整理して見て下さい。

L4D2
質問者

お礼

うーむ、なるほど・・・。 色々なやり方があるのですね。 ひとまず教えていただいたLOOPを使う方法を調べてみようと思います。 エラーが起こらないというのはアクセスも結構やっかいですね・・・。 アドバイスありがとうございました!

その他の回答 (3)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

書式が崩れている場合、と 入っている値が想定範囲外の場合、と少なくとも2通りあるはず。 前者はそもそも前提がくずれているので 入力される箇所を強化すべき。 後者は入力値そのままなのか、何か計算式で求まるものなのか、 その行(レコード)単位?で不正分をスキップして続行しても良いのか、 ファイル単位でしなければならないものなのか、 これらによっても、いろいろ対処が分かれてきます。 ----------------- 「ACCESSクエリでのインポート時」というのが不明。 エクセルでインポートしているデータがテーブルにあって、 そのテーブルから他のテーブルへ書き出すクエリの実行時に 入力ガイドが現れる、原因はエクセルからのデータであることは確認済、 ということと解釈しましたが・・・。

L4D2
質問者

補足

返信ありがとうございます。 説明不足で申し訳ありません・・・。 >書式が崩れている場合、と入っている値が想定範囲外の場合 書式が崩れている場合を想定しています。 あくまでフィールド名や中身が表ですらない場合にエラーメッセージを表示したいので・・・。 >「ACCESSクエリでのインポート時」というのが不明。 ボタンを押すとVBA中でクエリが呼び出され、そのクエリでエクセルファイルの表(最初のシートの内容のみ)をテーブルに取り込んでいます。 フィールド名はどちらも同じなので、レコードを追加しているようなイメージです。 現在はExcelファイルの書式が正しい場合は問題なく取り込めています。 DB接続先をExcelファイルのSheet1にしてSELECT文で取り出しています。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

自分でACCESSのモジュールにプログラムを書いて、テーブルへの読み込みに、エクセルのデータを読む部分を加えてテーブルにデータをセットしたら。 WEB上にはACCESSVBAでエクセルシートデータを読むコードなどアクサン見つかる。 http://www.nurs.or.jp/~ppoy/access/access/acM002.html などそういう処理だ。 ーーー >アクセスの仕様だと思うのですが・ そもそもMSアクセスは、基本的に、画面操作の手順の体系だ。 操作で回避手段(設定など)が無ければ、そういう場合VBAでも使わないと、違ったことは出来ないと思う。 ーーー >中身が想定と違う場合は これは具体的には、どういう場合なのか、か例示するのが、質問の作法では。

L4D2
質問者

補足

参考サイトの提示ありがとうございます。 説明が不足していたのですが、一応クエリ呼び出しにVBAを使用しているのでそのサイトを参考に少しコードをいじってみようと思います。 >中身が想定と違う場合 申し訳ありません、これも説明が不足していました。 本来の中身は一行目がフィールド名になっている普通の表です。 これがただの文章だったり、フィールド名が違っていた場合にエラーを出したいと思っています。 今後は具体例を挙げるよう気をつけます。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

いずれもVBAを使う。 EXCEL側で保存するとき整合性チェックをかける 保存されたブック(かCSV)に対して整合性チェックをかける ACCESSでインポートするときVBAで整合性チェックをかける 正常時実際のインポート、エラー時何もしない 大きくこの3点のどれかと思います。 今のところはACCESSのインポートで機能追加と いったところでしょう。 エラーが検知しやすいところで考える手もあります。

L4D2
質問者

補足

アドバイスありがとうございます・・・。 それと、説明不足ですみません。 説明を補足させて頂きますと、今自分が作成したのはVBA中でクエリを呼び出してExcelのシートに書かれている表を読み込み、同じフィールド名を持つACCESSテーブルの表にレコードを追加するという処理です。 おそらく3番目のVBA整合性チェックをすれば何とかなりそうな気がします。 詳しい方法か、時間が無ければ参考サイトだけでも教えて頂けるとありがたいです。

関連するQ&A

  • アクセス インポートファイルの再インポートを防ぐ

    アクセス2003を使用しています。 アクセスにて、エクセルファイルをインポートしています。 既にインポートしたエクセルファイルを再度インポートしないように、再取込みを行おうとした場合、 「既に取り込んでいるファイルです」とエラーメッセージを表示させて、取込み防止を行おうとしています。 クエリの重複チェックを設定していたのですが、行き詰ってしまいました。 アクセスのテーブル先頭フィールドの日付データ(yyyy/mm/dd)でチェックしたいと思っています。 教えてください。よろしくおねがいいたします。

  • Access のパラメータクエリについて

    お世話になります。 Accessでクエリを作成する練習をしています。 住所フィールドを含むクエリを基にして、住所フィールドにパラメータを設定するクエリを作成しています。 住所フィールドには、東京都で始まる住所、千葉県で始まる住所そして埼玉県で始まる住所が多数入力されています。 「パラメータの入力」ダイアログボックスに、ワイルドカードを使用して“東京都*”と入力して、クエリを実行すると1件も抽出できません。 パラメータには、ワイルドカードを使用できないのでしょうか。 または、他に理由があるのでしょうか。 よろしくお願いします。 OS: Windows 7  Office:2010

  • Accessのパラメータークエリについて教えてください。

    よろしくお願いします。 Accessのパラメータークエリについて教えていただきたいのですが、 例えば、商品名 と 担当者 と言うフィールドがあって、クエリを使用し[商品名を入力してください。][担当者を入力してください。]というパラメータクエリを作成しました。 そして、商品名のダイアログが出てきたときに「鉛筆」 担当者のダイアログが出てきたときに「遠藤」と入力すると思い通り物ものが出来るのですが、同じパラメータクエリを使用して、「遠藤」だけを抽出しようと思うと何も抽出されません。(たぶん「遠藤」と「空白」の抽出になっているのだと思うのですが・・・) ひつのクエリを使用して、2つでの条件と1つだけの条件で抽出することは出来ないでしょうか?よろしくお願いします。 Accessは2000or2002です。

  • accessでパラメータクエリ

    betchです。こんちは! アクセスでパラメータクエリを作るときに ”何も入力しない”もしくは”何か特別なものを入力” すると全てが表示されるようには出来ないですか? よろしくお願いいたします。

  • パラメータクエリの非表示化

    お世話になります。 Access2000を使っています。 テーブルのフィールド名の変更後、パラメータクエリを実行したら そのパラメータクエリのほかにも設定していないパラメータクエリが 表示されてしまいます。 表示させない方法はありますか?

  • ACCESSでクエリを実行時のパラメーターの入力に関して。

    ACCESSでクエリを実行時のパラメーターの入力に関して。 パラメーターを要求されるようになった理由は分かるのですが、どうすれば入力要求を止めることが出来るのか教えてください。

  • ACCESS2000 パラメータークエリー

     ウィンドウズ98、ACCESS2000です。  パラメータークエリーの作り方で、とあるテキストを入力すると それに対応するレコード抽出というのありますか?    とある日付を入力すると、それに対応するレコードを持ってくる パラメータークエリーは作れます。

  • パラメータクエリを一つにまとめたい

    クエリ1を基にフォーム1を作成、 クエリ2を基にフォーム2を作成、 クエリ1も2もパラメータクエリを使用していて フィールド名は「番号」データ型はテキスト型です。 そして新規にフォーム3を作成しフォーム1とフォーム2をドラッグしました。 この状態でフォーム3をダブルクリックすると パラメータの入力を2回求められますがどちらも同じ番号を入力しています。 (「001」などを2回入力) これを1回にすることは可能でしょうか? ・番号フィールドの基テーブルはクエリ1と2は違うテーブルです。 ・クエリ1と2は一つにまとめたくありません。 フォーム3上に別々に表示させたいです。 ・クエリ1には全ての番号がありますがクエリ2には抜けている番号があります。 「クエリ1の全レコードとクエリ2の同じ結合フィールドのレコードだけを含める。」で全ての番号を表示できる状態です。 説明が下手ですいません。 アドバイスお願い致します。

  • Accessのパラメータクエリに入力規則は設定できますか?

    Accessのパラメータクエリを作成した場合に表示されるダイアログボックスに入力する際に日本語入力のオン・オフを切り替える設定はできるのでしょうか? 例えば「担当者CD」が「130」と入力させる場合です。

  • ACCESS フォームから開く【クエリ「パラメータの入力」】でキャンセルしてもエラーにならない方法は?

    よろしくお願いします。 ACCESSのフォームでコマンドボタンに以下のように記述しました。クエリを開く単純なものですが、このクエリには「パラメータの入力」が必要で、入力すれば問題ありませんが、キャンセルした時にエラーが生じます。 Private Sub cmd受講者名簿表示_Click() DoCmd.OpenQuery "Q_受講者名簿用" End Sub **エラー表示内容** 実行時エラー ‘2001’: 直前の操作はキャンセルされました         終了   デバック   ヘルプ 直接クエリをひらいた場合にキャンセルしても問題ないのに、フォームでVBAで記述した場合にパラメータの入力があるクエリをキャンセルしてもエラーにならない方法は無いのでしょうか?

専門家に質問してみよう