今回はオートメーションエラーが発生する原因と対処法を備忘録も兼ねて残しておきたいと思います。
状況
別ファイル(CSV)を開き、データを転記するマクロを開発していたのですが、データを転記する処理でオートメーションエラーが発生してしまいました。
Sub open_TargetCsv()
Dim act_Book As Workbook
Dim act_Sht As Worksheet
Dim csv_Book As Workbook
Dim csv_Sht As Worksheet
Dim i As Long
Dim lastRow As Long
Dim target_Path As String
target_Path = ThisWorkbook.Path & "\個人情報.csv"
Set act_Book = ActiveWorkbook
Set act_Sht = act_Book.ActiveSheet
Set csv_Book = Workbooks.Open(target_Path, False, True)
Set csv_Sht = csv_Book.Worksheets(1)
csv_Book.Close False
lastRow = csv_Sht.Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastRow
act_Sht.Range("A1").Offset(i, 0) = csv_Sht.Range("A1").Offset(i, 0)
act_Sht.Range("B1").Offset(i, 0) = csv_Sht.Range("B1").Offset(i, 0)
act_Sht.Range("C1").Offset(i, 0) = csv_Sht.Range("C1").Offset(i, 0)
act_Sht.Range("D1").Offset(i, 0) = csv_Sht.Range("D1").Offset(i, 0)
act_Sht.Range("E1").Offset(i, 0) = csv_Sht.Range("E1").Offset(i, 0)
act_Sht.Range("F1").Offset(i, 0) = csv_Sht.Range("F1").Offset(i, 0)
Next i
End Sub
原因
CSVを閉じた後にデータを取得しようとしていたのが原因でした。
csv_Book.Close False
lastRow = csv_Sht.Cells(Rows.Count, 1).End(xlUp).Row
コードを見るとcsv_Book.Close False
の後にlastRow = csv_Sht.Cells(Rows.Count, 1).End(xlUp).Row
が記述されており、これだとCSVを閉じた後にCSVからデータを取得しようとしていることになってしまいます。
このようにたとえCSVを変数に格納していたとしても、データの操作はCSVは開いたままでないといけないみたいです。
対策
今回はオートメーションエラーが発生する原因と対処法を紹介しました。
別ファイルのデータを操作する際は処理が終わった後に閉じるようにしましょう。
このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント