Вот мой код:
Sub DataCopy()
Debug.Print "RUNNING SOUBRUTINE"
'Declarations.
Dim WksWorksheet01 As Worksheet
Dim WksWorksheet02 As Worksheet
Dim RngTrigger As Range
Dim RngDestination As Range
Dim LngCounter01 As Long
Dim RngTarget As Range
Dim LngColumn01 As String
Dim LngColumn02 As String
Dim LngColumn03 As String
Debug.Print "DECLARATIONS COMPLETED"
'Setting variables.
Set WksWorksheet01 = ActiveSheet 'better to give the specific sheet name here
Set WksWorksheet02 = Sheets("Foglio2") 'better to give the specific sheet name here
Set RngTrigger = WksWorksheet01.Range("AE3", WksWorksheet01.Cells(WksWorksheet01.Rows.Count, "AE").End(xlUp))
Set RngDestination = WksWorksheet02.Range("A3")
LngColumn01 = 1
LngColumn02 = 2
LngColumn03 = 4
Debug.Print "VARIABLE SETTING COMPLETED"
Debug.Print "REPORT"
Debug.Print "WksWorksheet01.Name = "; WksWorksheet01.Name
Debug.Print "WksWorksheet02.Name = "; WksWorksheet02.Name
Debug.Print "RngTrigger.Address = "; RngTrigger.Address
Debug.Print "RngTrigger count value = "; Excel.WorksheetFunction.CountA(RngTrigger)
Debug.Print "RngTrigger sum = "; Excel.WorksheetFunction.Sum(RngTrigger)
Debug.Print "RngDestination.Address = "; RngDestination.Address
Debug.Print "-------------"
'Covering the whole RngTrigger.
For Each RngTarget In RngTrigger
'Checking if RngTarget contains 1.
Debug.Print "RngTarget.Address = "; RngTarget.Address
Debug.Print "RngTarget.Value = "; RngTarget.Value
Debug.Print "Equal to 1? "; RngTarget.Value = 1
If RngTarget.Value = 1 Then
Debug.Print "Copied in row "; LngCounter01 + 1
Debug.Print "Pre-existing data? "; RngDestination.Offset(LngCounter01, 0).Value <> ""; RngDestination.Offset(LngCounter01, 1).Value <> ""; RngDestination.Offset(LngCounter01, 2).Value <> ""
'Copying data.
RngDestination.Offset(LngCounter01, 0).Value = RngTarget.Offset(0, LngColumn01 - RngTarget.column).Value
RngDestination.Offset(LngCounter01, 1).Value = RngTarget.Offset(0, LngColumn02 - RngTarget.column).Value
RngDestination.Offset(LngCounter01, 2).Value = RngTarget.Offset(0, LngColumn03 - RngTarget.column).Value
'Setting LngCounter01 for the next row.
LngCounter01 = LngCounter01 + 1
End If
Debug.Print "-"
Next
Debug.Print "COPING COMPLETED"
End Sub
Код, который вы разместили, не имел для меня особого смысла, поэтому я в основном создал новый. Я бы посоветовал вам указать имя листов при их установке. Я не считаю ActiveSheet и листы (2) действительно надежными (но я понимаю, что они могут быть необходимы). Скажите, работает ли он и / или если вам нужны какие-либо объяснения или улучшения.