Начинает получаться. Помогите разобраться почему цикл For после успешного поиска первого листа (совпадение в названии в двух книгах) и вставки значений куда нужно, не переходит к такой же задаче на следующем листе?
И не могу понять, почему итерации второго и третьего листов появляется msgbox, ведь листы называются так же.
Даже, когда цикл видит, что Лист "Признак 2" из одной книги равен "Признак 2" из другой, все равно он исполняет "Иначе".
Если часть кода закомментрировать, то цикл работает, но вариант с "Иначе" работает неправильно:
| Код |
|---|
Sub Перенос_данных_в_БРЗ()
'Заключаем данную книгу в переменную
Dim tWB As Workbook
Set tWB = ThisWorkbook
'Указываем путь в файлу БРЗ
Dim nWB As Variant
Set nWB = Workbooks.Open(Filename:="D:\VB\Перенос значений\БРЗ.xlsx")
'Организовываем цикл по листам со сверкой их названий (лист присутствует в обеих книгах)
Dim shA As Worksheet
Dim shB As Worksheet
Dim arr
For Each shA In tWB.Sheets 'лист в Сверке
For Each shB In nWB.Sheets 'лист в БРЗ
If shA.Name = shB.Name Then
If Not IsArray(arr) Then
ReDim arr(1 To 1): arr(1) = shA.Name
shA.Range("B4").Copy
shB.Activate
shB.Range("C4").PasteSpecial xlPasteValues
shA.Activate
shA.Range("C4").Copy
shB.Activate
shB.Range("C5").PasteSpecial xlPasteValues
shA.Activate
shA.Range("D4").Copy
shB.Activate
shB.Range("C6").PasteSpecial xlPasteValues: Exit For
Else
ReDim Preserve arr(1 To UBound(arr) + 1)
arr(UBound(arr)) = shA.Name
MsgBox ("Такого листа нет в БРЗ")
End If
End If
Next
Next
End Sub
|
Даже, когда цикл видит, что Лист "Признак 2" из одной книги равен "Признак 2" из другой, все равно он исполняет "Иначе".
Если часть кода закомментрировать, то цикл работает, но вариант с "Иначе" работает неправильно:
| Код |
|---|
Sub Перенос_данных_в_БРЗ()
'Заключаем данную книгу в переменную
Dim tWB As Workbook
Set tWB = ThisWorkbook
'Указываем путь в файлу БРЗ
Dim nWB As Variant
Set nWB = Workbooks.Open(Filename:="D:\VB\Перенос значений\БРЗ.xlsx")
'Организовываем цикл по листам со сверкой их названий (лист присутствует в обеих книгах)
Dim shA As Worksheet
Dim shB As Worksheet
Dim arr
For Each shA In tWB.Sheets 'лист в Сверке
For Each shB In nWB.Sheets 'лист в БРЗ
If shA.Name = shB.Name Then
'If Not IsArray(arr) Then
'ReDim arr(1 To 1): arr(1) = shA.Name
shA.Range("B4").Copy
shB.Activate
shB.Range("C4").PasteSpecial xlPasteValues
shA.Activate
shA.Range("C4").Copy
shB.Activate
shB.Range("C5").PasteSpecial xlPasteValues
shA.Activate
shA.Range("D4").Copy
shB.Activate
shB.Range("C6").PasteSpecial xlPasteValues ': Exit For
Else
'ReDim Preserve arr(1 To UBound(arr) + 1)
'arr(UBound(arr)) = shA.Name
MsgBox ("Такого листа нет в БРЗ") 'ПОЯВЛЯЕТСЯ КАЖДЫЙ РАЗ ПРИ СОПОСТОВЛЕНИИ РАЗНЫХ ЛИСТОВ. НАДО ЧТОБЫ ПОЯВЛЯЛСЯ, КОГДА ЛИСТА НЕТ В КНИГЕ
End If
'End If
Next
Next
End Sub
|
Изменено: - 26.03.2018 19:44:35