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

Вход

Регистрация

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

 

= Мир MS Excel/объект не найден. ActiveWorkbook - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
объект не найден. ActiveWorkbook
lopuxi Дата: Пятница, 23.12.2016, 12:04 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
Что я хочу сделать. Я хочу открыть книгу Excel, что бы собрать от туда данные.
Книгу что я хочу открывать макросом, все листы имеют имена - "Name". Имя листа к которому мне нужно обратиться Result имя указанное на листе ("Результат"), но его пользователь может изменить. И тогда макрос потеряет путь к нему. По этому мне нужно обратиться именно Rusult

Однако формулировка строки ниже - не работает. Макрос не может найти путь к объекту, но почему?
ActiveWorkbook.Rusult.cells(....) = ошибка 438 Объект не поддерживает это свойство или объект

Код начинается вот так:

[vba]
Код

FilesToOpen = Application.GetOpenFilename _
        (FileFilter:="Книга Excel (*.xls*), *.xls*", MultiSelect:=False, Title:="Выберите Excel файл, выбора канала")

    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]
К сообщению приложен файл: 1877177.xlsm (19.0 Kb)


О_о ...и так можно было?

Сообщение отредактировал lopuxi - Пятница, 23.12.2016, 12:46
 
Ответить
СообщениеЧто я хочу сделать. Я хочу открыть книгу Excel, что бы собрать от туда данные.
Книгу что я хочу открывать макросом, все листы имеют имена - "Name". Имя листа к которому мне нужно обратиться Result имя указанное на листе ("Результат"), но его пользователь может изменить. И тогда макрос потеряет путь к нему. По этому мне нужно обратиться именно Rusult

Однако формулировка строки ниже - не работает. Макрос не может найти путь к объекту, но почему?
ActiveWorkbook.Rusult.cells(....) = ошибка 438 Объект не поддерживает это свойство или объект

Код начинается вот так:

[vba]
Код

FilesToOpen = Application.GetOpenFilename _
        (FileFilter:="Книга Excel (*.xls*), *.xls*", MultiSelect:=False, Title:="Выберите Excel файл, выбора канала")

    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]

Автор - lopuxi
Дата добавления - 23.12.2016 в 12:04
K-SerJC Дата: Пятница, 23.12.2016, 12:16 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
пример бы...


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщениепример бы...

Автор - K-SerJC
Дата добавления - 23.12.2016 в 12:16
Manyasha Дата: Пятница, 23.12.2016, 12:24 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 901 ±
Замечаний: 0% ±

Excel 2010, 2016
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.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение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
Дата добавления - 23.12.2016 в 12:24
lopuxi Дата: Пятница, 23.12.2016, 12:46 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
пример бы...


Прикрепил файлы


О_о ...и так можно было?
 
Ответить
Сообщение
пример бы...


Прикрепил файлы

Автор - lopuxi
Дата добавления - 23.12.2016 в 12:46
K-SerJC Дата: Пятница, 23.12.2016, 13:05 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
[vba]
Код
wb_2.VBProject.VBComponents.Item("result").Activate
nn = ActiveSheet.Name
MsgBox wb_2.Sheets(nn).Cells(2, 1).Value
[/vba]

в вашем коде последнюю строку замените

но второй вариант Manyasha, правильнее будет


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJC - Пятница, 23.12.2016, 13:11
 
Ответить
Сообщение[vba]
Код
wb_2.VBProject.VBComponents.Item("result").Activate
nn = ActiveSheet.Name
MsgBox wb_2.Sheets(nn).Cells(2, 1).Value
[/vba]

в вашем коде последнюю строку замените

но второй вариант Manyasha, правильнее будет

Автор - K-SerJC
Дата добавления - 23.12.2016 в 13:05
lopuxi Дата: Пятница, 23.12.2016, 13:49 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
Да, Спасибо! Способы выше помогли решить проблему!)


О_о ...и так можно было?

Сообщение отредактировал lopuxi - Пятница, 23.12.2016, 13:50
 
Ответить
СообщениеДа, Спасибо! Способы выше помогли решить проблему!)

Автор - lopuxi
Дата добавления - 23.12.2016 в 13:49
Alex_ST Дата: Пятница, 23.12.2016, 14:23 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Файлы с макросами с работы открывать не могу … :'(
Может быть в коде из первого поста поэтому что-то и проглядел. Но вообще-то не понял, с какого перепугу к листу открытой книги wb_2 нельзя обращаться по её CodeName Result ?
Я как раз так обычно и защищаю код от ошибок в результате переименования листов "шибко дюже грамотными" юзерами: назначаю листам CodeName и обращаюсь по ним.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеФайлы с макросами с работы открывать не могу … :'(
Может быть в коде из первого поста поэтому что-то и проглядел. Но вообще-то не понял, с какого перепугу к листу открытой книги wb_2 нельзя обращаться по её CodeName Result ?
Я как раз так обычно и защищаю код от ошибок в результате переименования листов "шибко дюже грамотными" юзерами: назначаю листам CodeName и обращаюсь по ним.

Автор - Alex_ST
Дата добавления - 23.12.2016 в 14:23
Manyasha Дата: Пятница, 23.12.2016, 15:24 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 901 ±
Замечаний: 0% ±

Excel 2010, 2016
Алексей, здравствуйте. Вот здесь я давала объяснения.

Добавлю еще, что, если имя vba-проекта нужной книги уникально, то можно еще через него обратиться:
[vba]
Код
Application.VBE.VBProjects("VBAProjectWB2").VBComponents("result").Activate
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеАлексей, здравствуйте. Вот здесь я давала объяснения.

Добавлю еще, что, если имя vba-проекта нужной книги уникально, то можно еще через него обратиться:
[vba]
Код
Application.VBE.VBProjects("VBAProjectWB2").VBComponents("result").Activate
[/vba]

Автор - Manyasha
Дата добавления - 23.12.2016 в 15:24
Alex_ST Дата: Пятница, 23.12.2016, 15:35 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Спасибо, Маша.
Век живи, век учись...
Мне из книги в книгу обращаться приходится очень редко. Поэтому на эти грабли умудрился пока ни разу не наступить.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСпасибо, Маша.
Век живи, век учись...
Мне из книги в книгу обращаться приходится очень редко. Поэтому на эти грабли умудрился пока ни разу не наступить.

Автор - Alex_ST
Дата добавления - 23.12.2016 в 15:35
Alex_ST Дата: Пятница, 23.12.2016, 15:43 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Хотя, конечно, странно, т.к. по умолчанию доступ к объектной модели проекта VBA, кажется, закрыт...
А для раннего связывания (хоть я его обычно и не использую) надо ручками в референсах подключить библиотеку Microsoft Visual Basic for Applications Extensibility 5.3



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеХотя, конечно, странно, т.к. по умолчанию доступ к объектной модели проекта VBA, кажется, закрыт...
А для раннего связывания (хоть я его обычно и не использую) надо ручками в референсах подключить библиотеку Microsoft Visual Basic for Applications Extensibility 5.3

Автор - Alex_ST
Дата добавления - 23.12.2016 в 15:43
  • Страница 1 из 1
  • 1
Поиск:

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