Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Получение названия листа из его кодового имени в цикле - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Получение названия листа из его кодового имени в цикле (Макросы/Sub)
Получение названия листа из его кодового имени в цикле
vzdorny Дата: Суббота, 10.08.2019, 11:47 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Здравствуйте!
Пытаюсь получить названия листов из их кодовых имён:
[vba]
Код

Debug.Print (Лист1.Name)
Debug.Print (Лист2.Name)
[/vba]
всё нормально.
Пытаюсь сделать то же самое в цикле:
[vba]
Код
Dim i%
For i = 1 To 2
    Debug.Print ("Лист" & i.Name)
Next i
[/vba]
пишет ошибку.
Ладно, пытаюсь сделать отдельную переменную:
[vba]
Код

Dim i%
Dim s As String
For i = 1 To 2
s = "Лист" & i
    Debug.Print (s.Name)
Next i
[/vba]
Всё равно ошибка.
При том что
[vba]
Код

Dim i%
Dim s As String
For i = 1 To 2
s = "Лист" & i
    Debug.Print (s)
Next i
[/vba]
Пишет Лист1 и Лист2, как и должно быть по логике вещей.
Почему же они не воспринимаются VBA?
Спасибо!


Сообщение отредактировал vzdorny - Суббота, 10.08.2019, 11:48
 
Ответить
СообщениеЗдравствуйте!
Пытаюсь получить названия листов из их кодовых имён:
[vba]
Код

Debug.Print (Лист1.Name)
Debug.Print (Лист2.Name)
[/vba]
всё нормально.
Пытаюсь сделать то же самое в цикле:
[vba]
Код
Dim i%
For i = 1 To 2
    Debug.Print ("Лист" & i.Name)
Next i
[/vba]
пишет ошибку.
Ладно, пытаюсь сделать отдельную переменную:
[vba]
Код

Dim i%
Dim s As String
For i = 1 To 2
s = "Лист" & i
    Debug.Print (s.Name)
Next i
[/vba]
Всё равно ошибка.
При том что
[vba]
Код

Dim i%
Dim s As String
For i = 1 To 2
s = "Лист" & i
    Debug.Print (s)
Next i
[/vba]
Пишет Лист1 и Лист2, как и должно быть по логике вещей.
Почему же они не воспринимаются VBA?
Спасибо!

Автор - vzdorny
Дата добавления - 10.08.2019 в 11:47
nilem Дата: Суббота, 10.08.2019, 12:09 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
типа такого, наверное:
[vba]
Код
Sub ttt()
Dim i&
With ThisWorkbook.VBProject
    For i = 1 To 2
        MsgBox .VBComponents("Лист" & i).Properties("name")
    Next i
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Суббота, 10.08.2019, 12:24
 
Ответить
Сообщениетипа такого, наверное:
[vba]
Код
Sub ttt()
Dim i&
With ThisWorkbook.VBProject
    For i = 1 To 2
        MsgBox .VBComponents("Лист" & i).Properties("name")
    Next i
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 10.08.2019 в 12:09
bmv98rus Дата: Суббота, 10.08.2019, 12:11 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
только перебирая в цикле все листы и проверяя на совпадение CodeName с нужным
код пример от сюда
[vba]
Код
Function SheetByCodename(ByRef WB As Workbook, ByVal Codename$) As Worksheet
    On Error Resume Next: Dim sh As Worksheet
    For Each sh In WB.Worksheets
        If sh.Codename = Codename$ Then Set SheetByCodename = sh: Exit Function
    Next sh
End Function

Sub ПримерИспользования()
    Dim sh As Worksheet
    Set sh = SheetByCodename(ActiveWorkbook, "myname")
End Sub
[/vba]

Альтернативный вариант есть, но он требует разрешения доступа к объекту проекта, а там например так
[vba]
Код
ActiveWorkbook.VBProject.VBComponents("Sheet1")
[/vba]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщениетолько перебирая в цикле все листы и проверяя на совпадение CodeName с нужным
код пример от сюда
[vba]
Код
Function SheetByCodename(ByRef WB As Workbook, ByVal Codename$) As Worksheet
    On Error Resume Next: Dim sh As Worksheet
    For Each sh In WB.Worksheets
        If sh.Codename = Codename$ Then Set SheetByCodename = sh: Exit Function
    Next sh
End Function

Sub ПримерИспользования()
    Dim sh As Worksheet
    Set sh = SheetByCodename(ActiveWorkbook, "myname")
End Sub
[/vba]

Альтернативный вариант есть, но он требует разрешения доступа к объекту проекта, а там например так
[vba]
Код
ActiveWorkbook.VBProject.VBComponents("Sheet1")
[/vba]

Автор - bmv98rus
Дата добавления - 10.08.2019 в 12:11
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Получение названия листа из его кодового имени в цикле (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!