Что я хочу сделать. Я хочу открыть книгу Excel, что бы собрать от туда данные. Книгу что я хочу открывать макросом, все листы имеют имена - "Name". Имя листа к которому мне нужно обратиться Result имя указанное на листе ("Результат"), но его пользователь может изменить. И тогда макрос потеряет путь к нему. По этому мне нужно обратиться именно Rusult
Однако формулировка строки ниже - не работает. Макрос не может найти путь к объекту, но почему? ActiveWorkbook.Rusult.cells(....) = ошибка 438 Объект не поддерживает это свойство или объект
If VarType(FilesToOpen) = vbBoolean Then 'была нажата кнопка отмены - выход из процедуры Exit Sub End If
Set wb_1 = ActiveWorkbook ' Основная книга Set wb_2 = Workbooks.Open(FilesToOpen) ' Вторая книга
Namebook1 = wb_1.Name ' имя основной книги. Namebook2 = wb_2.Name ' Имя книги с афинити.
MsgBox wb_2.Worksheets(1).Cells(2, 1).Value ' - Так работает MsgBox wb_2.Worksheets("Результат").Cells(2, 1).Value ' - Так работает MsgBox wb_2.Result.Cells(2, 1).Value ' - А так не работает :(((
[/vba]
Что я хочу сделать. Я хочу открыть книгу Excel, что бы собрать от туда данные. Книгу что я хочу открывать макросом, все листы имеют имена - "Name". Имя листа к которому мне нужно обратиться Result имя указанное на листе ("Результат"), но его пользователь может изменить. И тогда макрос потеряет путь к нему. По этому мне нужно обратиться именно Rusult
Однако формулировка строки ниже - не работает. Макрос не может найти путь к объекту, но почему? ActiveWorkbook.Rusult.cells(....) = ошибка 438 Объект не поддерживает это свойство или объект
If VarType(FilesToOpen) = vbBoolean Then 'была нажата кнопка отмены - выход из процедуры Exit Sub End If
Set wb_1 = ActiveWorkbook ' Основная книга Set wb_2 = Workbooks.Open(FilesToOpen) ' Вторая книга
Namebook1 = wb_1.Name ' имя основной книги. Namebook2 = wb_2.Name ' Имя книги с афинити.
MsgBox wb_2.Worksheets(1).Cells(2, 1).Value ' - Так работает MsgBox wb_2.Worksheets("Результат").Cells(2, 1).Value ' - Так работает MsgBox wb_2.Result.Cells(2, 1).Value ' - А так не работает :(((
Sub test1() Dim sh As Worksheet FilesToOpen = "D:\Марина\test\файл.xlsx" Set wb_2 = Workbooks.Open(FilesToOpen) ' Вторая книга wb_2.VBProject.VBComponents("result").Activate Set sh = wb_2.ActiveSheet MsgBox sh.Name End Sub
[/vba] или так [vba]
Код
Sub test2() Dim sh As Worksheet, wsh FilesToOpen = "D:\Марина\test\файл.xlsx" Set wb_2 = Workbooks.Open(FilesToOpen) ' Вторая книга For Each wsh In wb_2.Sheets If wsh.CodeName = "result" Then Set sh = wsh Exit For End If Next wsh MsgBox sh.Name End Sub
[/vba]
Для первого способа должен быть разрешен доступ к объектной модели VBA.
lopuxi, попробуйте так [vba]
Код
Sub test1() Dim sh As Worksheet FilesToOpen = "D:\Марина\test\файл.xlsx" Set wb_2 = Workbooks.Open(FilesToOpen) ' Вторая книга wb_2.VBProject.VBComponents("result").Activate Set sh = wb_2.ActiveSheet MsgBox sh.Name End Sub
[/vba] или так [vba]
Код
Sub test2() Dim sh As Worksheet, wsh FilesToOpen = "D:\Марина\test\файл.xlsx" Set wb_2 = Workbooks.Open(FilesToOpen) ' Вторая книга For Each wsh In wb_2.Sheets If wsh.CodeName = "result" Then Set sh = wsh Exit For End If Next wsh MsgBox sh.Name End Sub
[/vba]
Для первого способа должен быть разрешен доступ к объектной модели VBA.Manyasha
Файлы с макросами с работы открывать не могу … Может быть в коде из первого поста поэтому что-то и проглядел. Но вообще-то не понял, с какого перепугу к листу открытой книги wb_2 нельзя обращаться по её CodeName Result ? Я как раз так обычно и защищаю код от ошибок в результате переименования листов "шибко дюже грамотными" юзерами: назначаю листам CodeName и обращаюсь по ним.
Файлы с макросами с работы открывать не могу … Может быть в коде из первого поста поэтому что-то и проглядел. Но вообще-то не понял, с какого перепугу к листу открытой книги wb_2 нельзя обращаться по её CodeName Result ? Я как раз так обычно и защищаю код от ошибок в результате переименования листов "шибко дюже грамотными" юзерами: назначаю листам CodeName и обращаюсь по ним.Alex_ST
Спасибо, Маша. Век живи, век учись... Мне из книги в книгу обращаться приходится очень редко. Поэтому на эти грабли умудрился пока ни разу не наступить.
Спасибо, Маша. Век живи, век учись... Мне из книги в книгу обращаться приходится очень редко. Поэтому на эти грабли умудрился пока ни разу не наступить.Alex_ST
Хотя, конечно, странно, т.к. по умолчанию доступ к объектной модели проекта VBA, кажется, закрыт... А для раннего связывания (хоть я его обычно и не использую) надо ручками в референсах подключить библиотеку Microsoft Visual Basic for Applications Extensibility 5.3
Хотя, конечно, странно, т.к. по умолчанию доступ к объектной модели проекта VBA, кажется, закрыт... А для раннего связывания (хоть я его обычно и не использую) надо ручками в референсах подключить библиотеку Microsoft Visual Basic for Applications Extensibility 5.3Alex_ST