【Excel VBA】オートメーションエラーが発生する原因と対処法

Excel
スポンサーリンク

今回はオートメーションエラーが発生する原因と対処法を備忘録も兼ねて残しておきたいと思います。

スポンサーリンク

状況

別ファイル(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に関する記事を不定期で投稿していますので、是非ご覧ください!

コメント

タイトルとURLをコピーしました