Что касается вашего текущего кода, следующее должно работать лучше.
Sub Newcancel_click2()
If ThisWorkbook.Sheets(1).Range("M4").Value = "EN" Then
MsgBox "You must Complete Previous cancellation.", vbCritical, "Error"
Else
Sheets("Jeremy").Range("B4:M4").Value = Sheets("Uncompleted").Range("A1:L1").Value
Sheets("Uncompleted").Rows(1).EntireRow.Delete shift:=xlUp
End If
End Sub
Интересное чтение для вас: Как избежать использования select в VBA
Asдля вашей проблемы " Subscript out of range " может означать, что некоторые из ваших диапазонов не определены должным образом. Ваш выбор может не соответствовать назначению копирования, или (наиболее вероятно) лист, на который вы ссылаетесь, не существует (либо опечатка, либо вы еще не создали ее).
Чтобы сослаться на другую книгувы можете использовать Workbooks("Workbook name").Sheets("Sheet name").Range
и т. д. Вы можете использовать activeworkbook
для ссылки на текущую активную книгу (не рекомендуется согласно приведенной выше ссылке, чтобы не использовать select), и вы можете ссылаться на книгу, в которой код VBA используется с Thisworkbook
,это проще, чем использовать два утверждения: Workbook("Name for this one")
и Workbook("Name for the other one")
В вашем случае это будет выглядеть примерно так:
Sub Newcancel_click2()
If ThisWorkbook.Sheets(1).Range("M4").Value = "EN" Then
MsgBox "You must Complete Previous cancellation.", vbCritical, "Error"
Else
Workbook("Agent").Sheets("Jeremy").Range("B4:M4").Value = Thisworkbook.Sheets("Uncompleted").Range("A1:L1").Value
Thisworkbook.Sheets("Uncompleted").Rows(1).EntireRow.Delete shift:=xlUp
End If
End Sub
(обратите внимание, что я сделал приближение к большинству вашихимена книг и листов, пожалуйста, проверьте и замените ваши настоящие имена)