前提・実現したいこと
VBAを使って、複数ファイルの内容を1つのファイルに統合するプログラムを書こうとしています。
発生している問題・エラーメッセージ
元ファイルの内容をコピーして、新しいブックのシートにペーストするコードの部分でエラーが発生します。
実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。
というエラーが発生します。
該当のソースコード
デバッグすると下記の行が指定されます。
.Range(.Cells(1, 1), .Cells(EndRow, Endcolumn)).Copy Workbooks(NewBook).Wroksheets(NewSht).Rows(1)
全体のソースは下記となります。
Sub IntegPro() '変数宣言 Dim MacroBook As String Dim MacroSht As String Dim InputPath As String Dim OutputPath As String Dim Outputfile As String Dim InputFile As String Dim i As Integer Dim NewBook As String Dim NewSht As String Dim EndRow As Long Dim Endcolumn As Integer Dim DataBook As String Dim Datasht As String '実行ファイルとシートの定義 MacroBook = ActiveWorkbook.Name MacroSht = ActiveSheet.Name '新規ブックを作成し、それのブックとシートを定義する Workbooks.Add NewBook = ActiveWorkbook.Name NewSht = ActiveSheet.Name '入力パスや出力パス、出力ファイルの定義 With Workbooks(MacroBook).Worksheets(MacroSht) .Activate InputPath = .Cells(2, 3).Value & "\" OutputPath = .Cells(3, 3).Value & "\" Outputfile = .Cells(4, 3).Value End With '入力ファイルを定義 i = 0 Do While Workbooks(MacroBook).Worksheets(MacroSht).Cells(7 + i, 3).Value <> "" 'ファイルを開く Workbooks.Open InputPath & Workbooks(MacroBook).Worksheets(MacroSht).Cells(7 + i, 3).Value '定義する DataBook = ActiveWorkbook.Name Datasht = ActiveSheet.Name 'データファイルの最終行と最終列を記憶する With Workbooks(DataBook).Worksheets(Datasht) EndRow = .Cells(Rows.Count, 1).End(xlUp).Row Endcolumn = .Cells(1, Columns.Count).End(xlToLeft).Column '開いたファイルのデータ部分をコピペする。(1回目だけデータ名もコピペする) If i = 0 Then '1回目だけ .Range(.Cells(1, 1), .Cells(EndRow, Endcolumn)).Copy Workbooks(NewBook).Wroksheets(NewSht).Rows(1) Else: '2回目以降 .Range(.Cells(2, 1), .Cells(EndRow, Endcolumn)).Copy Workbooks(NewBook).Wroksheets(NewSht).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If 'データファイルを閉じる Workbooks(DataBook).Close SaveChanges:=False End With i = i + 1 Loop '統合したファイルを名前を付けて保存 Workbooks(NewBook).Worksheets(NewSht).Activate ActiveWorkbook.SaveAs Filename:= _ OutputPath & Outputfile & ".xlsx", FileFormat:= _ xlOpenXMLWorkbook, CreateBackup:=False '閉じる ActiveWindow.Close End Sub
試したこと
末尾のRows(1)の部分をCells(1,1)に指定したり試してみましたが、原因がわかりません。
補足情報(FW/ツールのバージョンなど)
.Range(.Cells(1, 1), .Cells(EndRow, Endcolumn)).Copy
の部分は、元ファイルでの動作になります。
Workbooks(NewBook).Wroksheets(NewSht).Rows(1)の部分の、
下記変数は、VBAで新規作成したブックを指定しています。
NewBook
NewSht
解決方法をご存知の方、ご教示のほどよろしくお願い致します。
以下のようなコードだと思うのですが、手元の環境では動いてしまいました。何か差異はありそうでしょうか。環境はWindows 10、Excel 2016です。
Sub test()
With ActiveSheet
EndRow = 1
Endcolumn = 5
NewBook = "Book2"
NewSht = "Sheet1"
.Range(.Cells(1, 1), .Cells(EndRow, Endcolumn)).Copy Workbooks(NewBook).Worksheets(NewSht).Rows(1)
End With
End Sub
NewBook, NewSht の変数宣言、代入部分のコードも提示してください。
おそらく、NewBook, NewSht がString型でなくオブジェクト型で宣言しているのが原因のような予感。
回答いただきありがとうございます。
NewBook, NewSht がString型で指定しているのですが、うまくいっておりません。
全体のコードを追記しましたので、ご確認いただければ幸いです。
回答3件
あなたの回答
tips
プレビュー