
アクセスでエクセルのファイルをインポートするVBAを書いています。
まず、フォルダ内のファイル名を全て取得してコンボボックスで表示します。
そのコンボボックスからインポートするファイルを選択し、インポートします。
ところが、インポートしようとすると「実行時エラー'3011'」となり、オブジェクトが見つかりませんとなってしまいます。
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "氏名順_仮", Me.shimei_folder.Value & "\06.6.1氏名順.xls", True
このように記述するとキチンとインポートするのですが、
path = Me.shimei_folder.Value & "\" & CStr(Me.shimei_combo.Value)
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "氏名順_仮", path, True
これだと3011エラーになってしまうのです。
エラー表示が「オブジェクト"06.6.16氏名順$"が見つかりません」となるのですが、.xlsが$になってしまうのが原因??とも思います。
コンボボックス上は「06.6.16氏名順.xls」と表示されているし、デバッグしてみてもMe.shimei_combo.Valueは「06.6.16氏名順.xls」なのですが・・・。
どなたか、解決方法がわかれば教えて下さい。
ちなみにACCESS、EXCELともに2000です。
No.2ベストアンサー
- 回答日時:
こんにちは。
問題は、
"06.6.16氏名順.xls"
って、ファイル名としては、少し奇妙だと思います。例えば、"06_6_1氏名順.xls" なら分かるのですが、「.」が、それほど多いと、ファイル名としての認識が危ういような気がします。
単体では取れているようですから、それ以上のことは分かりませんが、他の方法としては、やはり、CurrentDirctor の変更で、そのまま、単発のファイル名でインポートしてしまう方法が考えられます。
いずれにしても、私なら、
If Dir(myPath & "\" & FileName) = "" Then
MsgBox "ファイルが見当たりません" : Exit Sub
Else
'DoCmd.TransferSpreadsheet '.....
End iF
このような、ファイル・チェッカーを入れます。
もちろん、ComboBox の値では、CStr 関数は必要がないように思います。また、path という変数ですが、一般的には、既存のプロパティ名(予約語とはいいませんが)ですから、その名称はやめたほうが無難だとは思います。
ご回答ありがとうございます。
大変ためになる回答で嬉しいです!
インポートに関しては#1の回答者様へのお礼の欄に書いた事情でなんとかうまく行きました。
確かにファイル名は私も引っかかったので、ファイル名をNameで変えてみたりもしたのですが、それでは解決しなかったのでとりあえずそのままでやっていました。
ファイルを作成しているところが、ずーっと日付をピリオドで記入するのでもうこれは仕方ないと諦めています。
が、エラートラップをいれるのはやろうと思います。
pathという変数も変更することにしようと思います。
お詳しそうなので伺いたいのですが、4.0のエクセルはインポートできないものなんでしょうか?
今回のエラーはどうにもそれが原因のような気がしてならないので・・・。
No.3
- 回答日時:
こんにちは。
Wendy02です。>4.0のエクセルはインポートできないものなんでしょうか?
>今回のエラーはどうにもそれが原因のような気がしてならないので・・・。
どうも、それが正解ですね。
だって、
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8 ....
このExcelのファイルフォーマットは、97以降を指すものです。
↓
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel4 ....
このフォーマットなら、Excel 4.0 なのですが、
On Error Resume Nextで、ファイルをインポートした時に Err.Number で、切り替えるという方法もあることはありますが、実務上は、一旦、Excel側のVBAで、全部、ファイルフォーマットをExcelの現バージョンに直してしまったほうが早いと思います。ファイルのタイムスタンプが変わってしまうという問題はありますが、バックアップを残しておけばよいだけでしょうね。
重ね重ねご回答ありがとうございます。
いくつかのファイルを見てみたところ、4.0はまれにしか存在しないみたいです。
>On Error Resume Nextで、ファイルをインポートした時に Err.Number で、切り替えるという方法もあることはありますが
これをもとに、基本的にはファイルを変更せずに取りこみ、エラーになったらエクセルのバージョンを変えてみようかと思います。
>ファイルのタイムスタンプが変わってしまうという問題はありますが
これは今回は全く問題ないのですが、こういったことまでキチンと頭がまわるというのが凄いですね!!
プログラムを作る際にはこういうことも考えるようにします。
質問以外のことでも大変勉強になりました。ありがとうございます!!
No.1
- 回答日時:
path = Me.shimei_folder.Value & "\" & CStr(Me.shimei_combo.Value)
ではなく例えば
Dim strFilename As String
strFilename = Me.shimei_combo.Value
として
path = Me.shimei_folder.Value & "\" & strFilename
ではどうでしょうか。これでいけると思いますが
ご回答ありがとうございます。
頂いた方法で試してみたところ、一部のファイルはインポートできました。
よく調べてみると、インポートできないのはExcel 4.0ファイルのようです。
上記で言うと、「06.6.16氏名順.xls」は4.0で、「06.6.1氏名順.xls」は2000でした。
Dim AppExcel As Object
Dim Wb As Object
Set AppExcel = CreateObject("Excel.Application")
Set Wb = AppExcel.Workbooks.Open(path)
Wb.SaveAs Filename:= _
Me.shimei_folder.Value & "\" & Me.shimei_combo.Value, FileFormat:=-4143
Wb.Close
Set oExcel = Nothing
というようにファイルのバージョンを変えてみたらインポートできました。
質問に誤りがあって大変申し訳ありませんでした。
でも、時間がかかってしまうのでなんだか不便です。
4.0はインポートできないんでしょうか??不思議です・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エラー3011
Visual Basic(VBA)
-
Microsoft Access エラー 3051
Visual Basic(VBA)
-
ACCESS クエリの抽出条件に他のテーブルの値を参照する方法
Access(アクセス)
-
-
4
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
5
ファイル名にドットを使ったファイルのインポート(ACCESSマクロ)
Visual Basic(VBA)
-
6
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
7
Accessでデータシートに同じデータがいくつもでてしまいます。
その他(データベース)
-
8
ACCESSでテーブルをコピーしようとすると3211のエラーが出てしまう
Access(アクセス)
-
9
ACCESSのVBAにてExcelのシートをコピーしたい
その他(データベース)
-
10
Access 1レコードずつcsvで出力したい
その他(データベース)
-
11
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
12
「フォームを作成できませんでした」
Access(アクセス)
-
13
マクロの「SaveAs」でエラーが出るのを解消したいです(再)
Visual Basic(VBA)
-
14
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
-
15
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
16
ACCESSフォームにコントロールが追加できない
Access(アクセス)
-
17
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
18
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
19
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
20
On ErrorでエラーNoが0
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「パス名が無効です」の発生原因
-
Excel 2003 のエラーメッセージ
-
【関数】同じ関数なのに、エラ...
-
エクセルで質問です。 ハイパー...
-
access テキストボックスの値取得
-
ExcelVBAで既に開いてるwordを...
-
cube PDFについて
-
batファイルでレジストリキーの...
-
Returnに対するGoSubがありません
-
ファイルのオープンについて
-
VBから参照できないCのDLLを使...
-
すでにファイルが開かれている...
-
[VBS]ファイルコピーで怪奇現象
-
gccを行ってもexeファイルが生...
-
メニューのショートカットキー
-
FORTRANの実行エラーについて
-
EXCELのVBAでの保存方法
-
他のmdbファイルのform,macro,r...
-
ワークブックに名前をつけて保...
-
エクセルマクロでエラーの原因...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【関数】同じ関数なのに、エラ...
-
access テキストボックスの値取得
-
エクセルで質問です。 ハイパー...
-
「パス名が無効です」の発生原因
-
PowerShellを使って関連付けら...
-
NAS上のファイルの使用中が解除...
-
gccを行ってもexeファイルが生...
-
アクセスのクエリでコンパイル...
-
ExcelVBAで既に開いてるwordを...
-
Returnに対するGoSubがありません
-
VB6 Dir関数で52エラー発生
-
VBでファイルが開かれているか...
-
データベースソフトのアクセス2...
-
エクセルマクロでエラーの原因...
-
fcloseで発生するエラーについて。
-
batファイルでレジストリキーの...
-
FORTRANの実行エラーについて
-
VBから参照できないCのDLLを使...
-
【COBOL】read文でエラー
-
DisplayAlertsブロパティで ”実...
おすすめ情報