アクセスでエクセルのファイルをインポートする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.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はインポートできないんでしょうか??不思議です・・・。
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 で、切り替えるという方法もあることはありますが
これをもとに、基本的にはファイルを変更せずに取りこみ、エラーになったらエクセルのバージョンを変えてみようかと思います。
>ファイルのタイムスタンプが変わってしまうという問題はありますが
これは今回は全く問題ないのですが、こういったことまでキチンと頭がまわるというのが凄いですね!!
プログラムを作る際にはこういうことも考えるようにします。
質問以外のことでも大変勉強になりました。ありがとうございます!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Access(アクセス) Access2016のExcelインポートの機能のことで教えてください 1 2022/09/11 14:58
- Visual Basic(VBA) エクセルVBA Workbook変数に変数を使ったファイル名を格納したい 5 2023/06/13 14:46
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Excel(エクセル) [クイックアクセスツールバー]の設定ファイルの格納場所について、 5 2023/04/21 14:43
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
ファイル名にドットを使ったファイルのインポート(ACCESSマクロ)
Visual Basic(VBA)
-
エラー3011
Visual Basic(VBA)
-
エクセルからアクセスにインポートすると、エラーが出てしまいます。原因を教えていただけませんか。
Access(アクセス)
-
-
4
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
5
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
6
excelインポート時の「実行時エラー2391」を事前に検知する方法
Access(アクセス)
-
7
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
8
エクセルからアクセスにインポートする際のエラーについて
Access(アクセス)
-
9
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
10
Access2003 クエリで、空の列は作れますか?
Access(アクセス)
-
11
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
12
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
13
accessでクエリをExcelにエクスポートする時にファイル名に日付を追加したい
Access(アクセス)
-
14
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
15
テキストボックスに入れた内容をAccessのテーブルに登録する方法を教えてください。
Visual Basic(VBA)
-
16
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
17
accessへエクセルの複数のシートのインポートの仕方
Access(アクセス)
-
18
アクセスVBAのMe!と[ ]
Access(アクセス)
-
19
アクセス(ACCESS) インポート定義について
Access(アクセス)
-
20
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
access テキストボックスの値取得
-
Access2013にてドラッグ&ドロ...
-
VBでファイルが開かれているか...
-
Adobeのプレミアプロの書き出し...
-
freadでデータがない場合の読込...
-
VB:「実行時エラー53 実行ファ...
-
エクセルVBAでパワーポイントを...
-
Returnに対するGoSubがありません
-
ADOを使用してExcelファイルを...
-
Request.BinaryReadでのエラー
-
アクセスのクエリでコンパイル...
-
FORTRANの実行エラーについて
-
VBから参照できないCのDLLを使...
-
ディストリビューションで作成...
-
Access2010 コンパイルエラー...
-
Dreamweaver3で「onLoad内で_on...
-
batファイルでレジストリキーの...
-
VC++2005 windowsフォームアプ...
-
CSVファイルが開かれているかど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
VBでファイルが開かれているか...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
PowerShellを使って関連付けら...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
FTPの送信結果を検知したい
-
NAS上のファイルの使用中が解除...
-
VBA ExecuteExcel4Macro 型が一...
-
access テキストボックスの値取得
-
EXCELのVBAでWORDが開いてある...
-
すでにファイルが開かれている...
-
EXCELVBAでONEDRIVE上への保管...
-
Excelファイルのマクロによる排...
-
OUTLOOK VBA 指定フォルダ内の...
-
RAR圧縮ファイル(分割)の順番が...
-
エクセルマクロでエラーの原因...
おすすめ情報