電子書籍の厳選無料作品が豊富!

Accessフォーム上でExcelインポート処理を作成しました。
自分ではなくユーザーが使うためのツールとして提供する予定です。
このインポート時にユーザーがExcelファイルを編集(列の追加)をしてしまうケースがあり、そのファイルをインポートしようとすると「実行時エラー2391」で止まってしまいます。
この挙動を回避するため「実行時エラー2391」の発生前にこれを防ぐ処理を考えています。

エラーの検知は経験がなく苦慮しています。
ご存知の方いらっしゃいましたらお知恵をお貸しください。

よろしくお願いいたします

A 回答 (6件)

その認識で間違っていません。


処理の流れとしては
 ①エクセルブックを開く
 ②インポートするシートの存在チェックと取得(オブジェクトに格納)
 ③ヘッダーの確認
 ④明細行の開始位置の確認
 ⑤ブックを閉じる
 ⑥Accessにインポートする
といったところでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます!
やはりその手順ですよね。
それは提案してみたのですが、
この作業の効率化が目的なので手順が増えるとの指摘で却下されてしまいました。

やはり「Excelファイルの編集はエラーの原因になるため絶対禁止!」
という運用でカバーするのがベストなのかもしれませんね。

いろいろとご丁寧な回答をいただきありがとうございました!!

お礼日時:2020/08/02 12:43

こんにちは



よこからですが・・・

全体像が分かっていないので的外れかもしれませんが、
>ユーザーがExcelファイルを編集(列の追加)をしてしまうケースがあり
列の編集等が正規の使い方ではないということのようですので、まず、
・そのことの説明をきちんと行う
二つ目には、
・エクセルファイルの「保護」機能で、必要以外の操作を禁止しておく

の両方を行っておくことで、問題の発生をあらかじめ回避できるのではないかと推測します。
    • good
    • 0

No.2です。



> やはり運用で解決しなくてはならない領域なんですね。

「運用」という言い方はちょっと違います。
「運用」というとシステムを提供する側からすると「逃げ」のニュアンスがあります。「本来はこうするのがよいのだが、それは難しいので人間にこう対応してもらおう」といった。。。

そうではなく作業者が我慢や面倒を感じることなくかつ、正しいデータがシステム中のソフトウェアに入力されうような「操作手順」を開発するというスタンスです。
    • good
    • 0
この回答へのお礼

ご指摘重ねてありがとうございます

お礼日時:2020/08/02 13:44

Excelインポート処理というのはVBAで作ったのではないのですか?


AccessVBAでもエクセルを開いたり、変更したりすることは出来ますよ。
    • good
    • 0
この回答へのお礼

Excelインポート処理というのはAccessVBAで作っています。
Access側から対象のExcelファイルを開いてセルを確認するということでしょうか。
すみません、飲み込み悪くて。

お礼日時:2020/08/02 12:29

> このインポート時にユーザーがExcelファイルを編集(列の追加)をしてしまうケースがあり、



まずはお客様がなぜそれを行うのか、どういう必要性があるのかを確認することが必要でしょう。
興味本位でいじっているのなら「こういう手順で行わないとこういうエラーにります」と説明し、操作説明書にも明記する必要があります。

全体像が全く見えないのでピンボケコメントかもしれませんが、「作業者はExcelを使っていて、そこで出来上がったExcelファイルの内容をAccessい食わせる」ということなのであれば、作業者がExcelで開いているExcelファイルのシート上には「データ保存」とか「データ出力」とか「終了」とかいったボタンが有って、Excelでの作業を終えたらそのボタンを押すという操作手順にする。
でそのボタンが押されたらExcelマクロで入力データを確認しOKならCSVファイル(TAB区切りではなくカンマ区切り)に書きだす。
このCSVファイルをAccessに食わせる。
CSVファイルではなく該当Excelファイルに特定の名前のシートを追加し、入力シートの所定の範囲を参照してそこにAccessに食わせるデータを作るという方法もありますね。

ということでAccessに食わせる直前(?)にエラーが起きないようにするのではなく、「作業者が勝手に触る可能性のあるデータをAccessに食わせない。必ず正しいデータを食わせる」と考えるのが人間系を含むシステムの機能をまとめる際の正しい思考だと思います。

参考まで。
    • good
    • 0
この回答へのお礼

とても丁寧なコメントをありがとうございます
状況はおっしゃる通りです。
「作業者が勝手に触る可能性のあるデータをAccessに食わせない。必ず正しいデータを食わせる」
これもご指摘の通りで間違いないことだと認識しています。
やはり運用で解決しなくてはならない領域なんですね。
勉強になります。
ありがとうございました!

お礼日時:2020/08/02 11:35

インポートで止まってしまうのであれば、


インポート前にブックを開き、ヘッダー項目の位置と明細の開始位置を確認するロジックを追加するのが
一番簡単の方法かもしれません。
    • good
    • 0
この回答へのお礼

ありがとうございます
『インポート前にブックを開き、ヘッダー項目の位置と明細の開始位置を確認するロジック』とは、Accessにこのようなロジックを組み込めるのでしょうか。もしそれができればかなり楽になります。

お礼日時:2020/08/02 11:23

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

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


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