🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

Q&A

解決済

1回答

847閲覧

複数ファイルのデータを転記したい

sa3sa3sa3

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

0グッド

0クリップ

投稿2019/12/05 02:15

前提・実現したいこと

FileDialogで複数のファイルを指定し、各ファイルの内容(A1~AW400:19600セル程度)をコピーし転記したいです。

発生している問題・エラーメッセージ

GetObjectでデータをオブジェクトに格納し転記しようとしているのですが、以下のエラーとなります。

実行時エラー '-2147221020(800401e4)': オートメーションエラーです。 構文が無効です

該当のソースコード

VBA

1 Dim i As Integer 2 Dim lPos As Long '位置取得 3 Dim appExcel As Object '読み込みファイル(object) 4 Dim strFile1(3) As String '前回分:読み込みファイル 5 Dim strFileName1(3) As String '前回分:読み込みファイル名 6 7 '読み込みファイルを指定 8 With Application.FileDialog(msoFileDialogFilePicker) 9 With .Filters 10 .Clear 'ファイルの種類:クリア 11 .Add "Excelブック", "*.xls; *.xlsx; *.xlsm" 'ファイルの種類:追加 12 End With 13 .AllowMultiSelect = True '複数選択:可 14 15 If .Show = True Then 'ダイアログボックスを表示 16 For i = 1 To .SelectedItems.Count 17 If i > 3 Then 18 MsgBox "ファイルは3個までです" 19 Exit Sub 20 End If 21 strFile1(i) = vbLf & .SelectedItems(i) 22 23 'ファイル名取得 24 lPos = InStrRev(strFile1(i), "\") 25 strFileName1(i) = Mid(strFile1(i), lPos + 1) 26 Next i 27 Else 28 Exit Sub '「キャンセル」ボタンを押された場合、処理を中断する 29 End If 30 End With 31 32 MsgBox strFile1(1) 33 Set appExcel = GetObject(strFile1(1)) '←ここでエラーとなります

試したこと

FileDialogの複数選択を不可とし、1つのファイルで処理を行った場合は正常に動作します。
選択したファイルを1つずつWorkbooks.Openでオープンしてコピーしようとしましたが、それもエラー(ファイルがない、もしくは移動された)となります。
助言がいただけたら幸いです。

補足情報(FW/ツールのバージョンなど)

なし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

GetObjectに与えるファイル名はフルパスでないとエラーになります。
GetObject(strFile1(1))のstrFile1(1)はフルパスのファイル名ではありません。それが、エラーの原因かと。

投稿2019/12/05 03:16

tatsu99

総合スコア5493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sa3sa3sa3

2019/12/05 04:08

早速の回答ありがとうございます。 strFile1(1)はフルパスにしています。1行上のmsgboxでも確認しています。 また、同じ記述で、複数選択:不可(.AllowMultiSelect = False)の場合、正常に動作することも確認しています。 他にお気付きの点があれば、アドバイスお願いいたします。
tatsu99

2019/12/05 04:19

失礼しました。 strFile1(i) = vbLf & .SelectedItems(i) を strFile1(i) = .SelectedItems(i) にしてください。 vbLfが悪さをしています。
sa3sa3sa3

2019/12/05 04:57

返信ありがとうございます。 教えていただいた通り「vbLf &」を削除したら正常に動作しました。 大変たすかりました、本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問