Страницы: 1
RSS
Сослаться на лист в VBA
 
Добрый день!

Я в коде хотел получить более компактную запись ссылаясь на лист не по прямому наименованию, а подстановкой ссылки на лист, приведу пример:
Код
For Each wsBaseSheet In wbAct.Worksheets 'цикл по всем листам в открытой книге
            sSheetNameBase = wsBaseSheet.Name ' присваиваем строковой переменной имя листа из открытой книги
            If sSheetNameBase = sSheetName Then 'сравниваем имя листа в книге и имя листа в массиве
                For b = 1 To arrCol(a) 
                    lRow1 = wbAct.wsBaseSheet.Cells(Rows.Count, b).End(xlUp).Row 

Но такой код выдает ошибку, нашел на форумах подход, что лист нужно определить через SET

Попробовал так:

Код
For Each wsBaseSheet In wbAct.Worksheets 'цикл по всем листам в открытой книге
            sSheetNameBase = wsBaseSheet.Name ' присваиваем строковой переменной имя листа из открытой книги
            Set wsWsheet = wbAct.Worksheets(" & sSheetNameBase & ") 
            If sSheetNameBase = sSheetName Then 'сравниваем имя листа в книге и имя листа в массиве
                For b = 1 To arrCol(a) 
                    lRow1 = wbAct.wsWsheet .Cells(Rows.Count, b).End(xlUp).Row 

Но тоже выдает ошибку.. как корректно можно сослаться на лист, если лист у нас определяется перебором переменной в цикле, т.е. я не могу сослаться на конкретный лист, или это невозможно?

 
Код
For Each wsBaseSheet In wbAct.Worksheets 'цикл по всем листам в открытой книге
 '           sSheetNameBase = wsBaseSheet.Name ' присваиваем строковой переменной имя листа из открытой книги ' не нужно
            If wsBaseSheet.Name = sSheetName Then 'сравниваем имя листа в книге и имя листа в массиве
                For b = 1 To arrCol(a) 
                    lRow1 = wsBaseSheet.Cells(Rows.Count, b).End(xlUp).Row ' wsBaseSheet уже интересующий нас лист
По вопросам из тем форума, личку не читаю.
 
БМВ, Спасибо большое! работает... то есть моя ошибка, что я прописывал книгу перед листом, а ссылаться нужно сразу на лист? потому что лист и так уже определен, и понятно в какой он книге?
 
Согласно первой строке макроса из #2 переменная wsBaseSheet последовательно ссылается на листы книги, соответствующей переменной wbAct.
Кстати, наименования листов, как правило, лучше сравнивать регистронезависимо, например так:
Код
 If UCase(wsBaseSheet.Name) = UCase(sSheetName)
Владимир
Страницы: 1
Наверх