Вы не сказали, какая строка вызывает ошибку, но похоже, что, скорее всего, эта строка ...
ActiveSheet.Range("A2").End(xlDown).Offset(1, 0).Select
Она начинается с А2, а затем идет вниз, пока не найдет последнюю используемый ряд. Однако, если нет никаких используемых строк ниже A2, он находит самую последнюю строку в столбце A. Затем он пытается сместиться на одну строку ниже, которая не существует, и, следовательно, ошибка. Вместо этого вы можете найти следующую доступную строку следующим образом ...
ActiveSheet.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select
Хотя нет необходимости делать весь этот выбор. Это очень неэффективно. Таким образом, ваш макрос может быть переписан следующим образом ...
Option Explicit
Sub INPUT_DATA()
' INPUT_DATA Macro
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Dim sourceWorksheet As Worksheet
Set sourceWorksheet = Worksheets("Input")
Dim destinationWorksheet As Worksheet
Set destinationWorksheet = Worksheets("Database")
With sourceWorksheet
If .Range("D55").Value = 0 Then
.Range("B2:AI52").Copy
With destinationWorksheet
.Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
End With
End If
End With
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox ("File has been updated. DO NOT PRESS UPDATE again, as it will enter the same data once again")
End Sub