Самостоятельные попытки доработать макрос, предоставленный Юрий М не увенчались успехом, как ни старался.
Поэтому прошу помощи экспертов.
Начну сначала.
Первоначально задача состояла скопировать с листа «вок» на «Лист2» строки, в которых значение в столбце В совпадает со значением в ячейке А1 (выпадающий список) другого (3-го листа) «пк». Перед копированием Лист2 очищается от значений предыдущего копирования.
Юрий М любезно выполнил просьбу. Макрос отлично работает при изменении значения в выпадающем списке (Лист «пк» ячейка А1) и если это значение встречается на листе «вок» .
Код |
---|
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Then Exit Sub
If Not Intersect(Target, Range("A1") Is Nothing Then
iName = Target
Call SSSS ‘ выполняет перенос с листа «вок» на Лист2
End If
End Sub
|
Код SSSS - копирования совпадающих строк на лист2
Код |
---|
Public iName As String
Sub SSSS() 'SSSS
Dim LastRow As Long, Rw As Long, Rv As Long
Dim x As Long, i As Long, Arr()
x = 1
With Sheets("вок")
LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
Arr = Range(.Cells(2, 1), .Cells(LastRow, 13)).Value
End With
ReDim arr2(1 To UBound(Arr), 1 To 13)
For i = 1 To UBound(Arr)
If Arr(i, 2) = iName Then
arr2(x, 1) = Arr(i, 1)
arr2(x, 2) = Arr(i, 2)
arr2(x, 3) = Arr(i, 3)
arr2(x, 4) = Arr(i, 4)
arr2(x, 5) = Arr(i, 5)
arr2(x, 6) = Arr(i, 6)
arr2(x, 7) = Arr(i, 7)
arr2(x, 8) = Arr(i, 8)
arr2(x, 9) = Arr(i, 9)
arr2(x, 10) = Arr(i, 10)
arr2(x, 11) = Arr(i, 11)
arr2(x, 12) = Arr(i, 12)
arr2(x, 13) = Arr(i, 13)
x = x + 1
End If
Next
With Sheets("Лист2")
Rw = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Range(.Cells(2, 1), .Cells(Rw + 1, 13)).ClearContents
.Cells(2, 1).Resize(x - 1, 13).Value = arr2
.Calculate
End With
End Sub |
Однако, макрос выдает ошибку 1004, если это значение А1 не встречается на листе «вок».
Условие о том, что значения из выпадающего списка А1 не обязательно должны присутствовать на листе «вок» я не отразил. (виноват, дурак, исправлюсь)
Кроме того, имеется лист «пр», с которого также необходимо скопировать строки, в которых значение в столбце В совпадает со тем же значением в ячейке А1 (выпадающий список), но только на другой «Лист3». Эту часть я планировал сделать сам по аналогии.
Сделал, и макрос работает, но только если имеются совпадения одновременно в обоих листах «вок» и «пр». Но если нет совпадения хоть на одном из листов («вок» или «пр») также дает ошибку 1004.
Перепробовал различные варианты:
Код |
---|
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Then Exit Sub
If Intersect(Target, Range("A1") Is Nothing Then
Call S ‘S - просто очистка диапазона на листе2 (от предыдущих копирований)
Else
iName = Target
Call SSSS
End If
End Sub
|
Попытка через проверку совпадений
Private Sub Worksheet_Change(ByVal Target As Range)
Код |
---|
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Then Exit Sub
If Application.CountIf(Worksheets("вок").Range("B:B"), Worksheets("пк").Range("A1")) = 0 Then MsgBox "нет совпадений"
Else
If Not Intersect(Target, Range("A1")) Is Nothing Then
iName = Target
Call SSSS ‘выполняет перенос с листа «вок» на Лист2
End If
End Sub
|
Код |
---|
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Or DD Then Exit Sub
If Not Intersect(Target, Range("A1") Is Nothing Then
iName = Target
Call SSSS ‘выполняет перенос с листа «вок» на Лист2
End If
End Sub
|
Код |
---|
Где DD в модуле
Function DD()
If Application.CountIf(Worksheets("вок" .Range("B:B" , Worksheets("пк" .Range("A1" ) = 0 Then MsgBox "нет соответствий"
DD = True
End Function
|
Код |
---|
[/CODE] Эти попытки хоть какие-то действия давали (но не те, что нужно)
Было еще куча других попыток, которые выдавали ошибки.
Предполагаю, что в связи с введением условия, что значения из выпадающего списка А1 не обязательно должны присутствовать на листе «вок» конструкция вида:
[CODE]Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Then Exit Sub
If Intersect(Target, Range("A1" ) Is Nothing Then
………..
………..
End Sub |
Код |
---|
не будет работать, и должно быть что-то другое. Прошу помочь и указать где, что и как сделать? Или где почитать? |