アプリ版:「スタンプのみでお礼する」機能のリリースについて

ACCESS上でエクセルファイルをインポートするにおいてそのファイルが存在するかの判定用IF文は
If Dir("C:\インポートファイル.xls") = "" Then MsgBox "インポートファイル.xlsファイルがありません。"
End If
でうまくいくのですが

インポートファイル.xls
______________________________
/シート2/シート3/シート4/

インポート用EXCELファイルのシート1が無いことを判定するときの設定方法がネットを調べても発見することが出来ませんでした、やり方があるようなら教えてください

If Dir("C:\インポートファイル.xls" ※恐らくここに何か追加が必要だとは思うのですが※ ) = "" Then
MsgBox "インポートファイル.xlsファイルのシート1がありません。"
End If
一度質問を登録したのですが、登録失敗していたので再度質問しました。よろしくお願いします。

A 回答 (5件)

下記の文で一応テストしましたが、内容通り動いてくれました。

(わざとシートを抜けた状態でインポートしてみました。)但し、#3の方のエラーコードと違うのでちょっとその辺がどうなのか実際のシートで試してみればいかがですか?
又、TransferSpreadsheetの各スイッチ等については、実際の環境の数値に合わせて下さい。くわしくはヘルプに出ていますので確認して下さい。

Private Function インポート()
On Error GoTo Errインポート

Dim strテーブル名 As String
Dim strシート名 As String
Dim intカウント As Integer
Dim strエラーメッセージ As String

intカウント = 1
strエラーメッセージ = ""

DoCmd.RunSQL "delete * from 売上1テーブル"
DoCmd.RunSQL "delete * from 売上2テーブル"
DoCmd.RunSQL "delete * from 売上3テーブル"
DoCmd.RunSQL "delete * from 売上4テーブル"

Do While intカウント <= 4
strテーブル名 = "売上" & intカウント & "テーブル"
strシート名 = "シート" & intカウント & "!"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97, strテーブル名, "C:\インポートファイル.xls", True, strシート名 & "A1:C5"
intカウント = intカウント + 1
Loop

MsgBox ("処理終了しました。" & Chr(13) & strエラーメッセージ)

Exit Function

Errインポート:
Select Case Err.Number
Case 3011
strエラーメッセージ = strエラーメッセージ & "," & strシート名 & "が存在しませんでした。"
Resume Next
Case Else
MsgBox (Err.Number & ":" & Err.Description)
Exit Function
End Select

End Function
    • good
    • 0
この回答へのお礼

なんとかうまくいきそうです。
今回は本当にありがとうございました。

お礼日時:2005/03/17 11:03

#4さんの例のようにセルも指定('Sheet1!A1:C5')すると、


エラーコードは3011(オブジェクト'Sheet1!A1:C5'は見つかりませんでした。オブジェクトが存在しているか、または名前やパス名が正しいかを確認してください。)になります。

シート全体を指定('Sheet1!')すると、エラーコードは3125になります。
    • good
    • 0
この回答へのお礼

なんとかうまくいきそうです。
今回は本当にありがとうございました。

お礼日時:2005/03/17 11:03

シート1~4までインポートする構文をそれぞれ作成し、実際にシートが存在したか否かをそのエラーコードで判定してはどうでしょうか?



該当のシートが存在しない場合には、
エラーコード=3125
「'Sheet1$'が見つかりません。有効なパラメータやエイリアス名になっているか、無効な文字や区切り記号がふくまれていないか、または名前が長すぎないかを確認してください。」
が出ます。

このエラーコードをハンドリングして、次処理の分岐を考えては!?
    • good
    • 0

シートが存在しない場合のみテーブルクリアとありますが、シートが存在する場合は、テーブルデータをクリアせずに追加でインポートするとい

う事でしょうか?

この回答への補足

VBAで組んでいる流れ的には

【開始】
売上1テーブル(シート1用)をクリア
売上2テーブル(シート2用)をクリア
売上3テーブル(シート3用)をクリア
売上4テーブル(シート4用)をクリア

EXCELファイルにシート1が存在すれば
売上1テーブル(シート1用)にインポートする
存在しないときは
シート1がありませんと表示する
EXCELファイルにシート2が存在すれば
売上2テーブル(シート2用)にインポートする
存在しないときは
シート2がありませんと表示する
EXCELファイルにシート3が存在すれば
売上3テーブル(シート3用)にインポートする
存在しないときは
シート3がありませんと表示する
EXCELファイルにシート4が存在すれば
売上4テーブル(シート4用)にインポートする
存在しないときは
シート4がありませんと表示する

各シートごとに集計処理をする
【終了】
という感じになります。

IF文にてシートの有無の判定ができればそれで問題なくいけると思っているのですが
IF文のみでのシートの有無の判定はできないのでしょうか?

補足日時:2005/03/15 10:45
    • good
    • 0

最初に存在判定を行い、全てのシートが無くては実行をキャンセルしなくてはいけないのでしょうか?


Dir関数ではなくて、TransferSpreadsheetを使い、インポートを実行する際に、シート名指定でLoopさせて、シートが存在しなくてErrの時にそのシート名を変数かテーブルに格納しておき、最後にErrのシート名をログにはきだすか、メッセージを出すというのではどうでしょうか?

この回答への補足

早速のご回答ありがとうございます。私の説明不足でデータ読み出しの流れを記入していませんでした。

流れ的には
シート1がある場合はシート1テーブルへインポート
シート1が無い場合はシート1テーブルをクリア
シート2がある場合はシート2テーブルへインポート
シート2が無い場合はシート2テーブルをクリア
という感じになります。
ですのでそのシートが存在しないときはそのシートを無視してつぎの処理に行くという感じになるのです。
なのでシートが有るか無いかの判定文さえ出来ればいいかなと思ってます。

へたくそな説明で申し訳ありません。

補足日時:2005/03/14 13:32
    • good
    • 0

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

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

関連するカテゴリからQ&Aを探す


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