Страницы: 1
RSS
Ошибка метода .select Excel 2016, run-time error '1004'
 
Уважаемые форумчане,
может кто сталкивался с ситуацией:
перешел на ексель 2016 и не отрабатывает элементарный код
Код
Sheets("2").Range("A1").Select
Как побороть сие?
 
Сначала активируем нужный лист, а уже потом выбираем ячейку. Но в большинстве случаев можно обойтись и без активации листа и выделения ячейки.
Что собираетесь с этой ячейкой делать дальше?
 
Юрий М, в том и дело что ничего с ячейкой делать не собираюсь (давно не пользуюсь селектами при написании кода),
проблема с некоторыми действиями на листе в т.ч. с таким "элементарным" как селект. Еще с конструкциями with sheets("...")
т.е. код написанный в Ексель 2010 в местах обращения к объекту "лист" и его членам не отрабатывает (вываливается в ошибку 1004)
Может какое обновление пропустил?    
 
Цитата
Vitallic написал:
ничего с ячейкой делать не собираюсь
Тогда зачем её выделяете? )
Цитата
Vitallic написал:
Еще с конструкциями with sheets("...")
т.е. код написанный в Ексель 2010 в местах обращения к объекту "лист" и его членам не отрабатывает
Прекрасно всё отрабатывает:
Код
Sub test2()
    With Sheets("2").Range("A1")
        .Interior.ColorIndex = 3
    End With
End Sub



 
Vitallic, 2 - это имя листа (то, что написано на ярлычке) или номер? Если номер, 2 должно быть без кавычек.
 
Алексей, в примере и индекс и имя одинаковые - 2 )) Только Аркуш. Это на каком языке?
 
Юрий, пардон, пример не заметил. Гугл определяет Аркуш как украинский = лист.
 
Юрий правильно обозначил, что Сначала активируем нужный лист, а уже потом выбираем ячейку
Если активным листом не является лист "2", то код выдаст ошибку в любой версии Excel.
Работающий код такой:
Код
Sub test()
  With Sheets("2")
    .Select
    .Range("A1").Select
  End With
End Sub
 
Большое спасибо за разъяснение.
Действительно как оказалось версия Excel ни при чем.
Поскольку с селектами как писал ранее не работаю потому и не разобрался с нюансами.
ZVI, Юрий М,  еще раз спасибо
П.С.
Ну Вы и обсуждение развернули посреди ночи  :)
 
Подниму старую тему, но может кому пригодится.
Столкнулся с такой же проблемой, код написанный и работавший в Excel 2010 много лет перестал работать в Excel 2016.
Код
sht.Activate
sht.Cells(3, 1).Select
Выдавал такую же ошибку с Select, как у топикстартера.
Проблема (а точнее особенность) была в том, что Excel запускался из Acces в режиме невидимости (Visible = False).
Добавление следующего кода решило проблему:
Код
ExcelApp.Visible = True
ExcelApp.ScreenUpdating = False
И в добавок словил похожую проблему, когда в коде VBA из Access запускается макрос из открытого файла Excel через:
Код
ExcelApp.Run "макрос"

Решается так же.
Вот такая не очевидная заморочка вышла.
Изменено: Gauss - 16.05.2018 08:11:44
 
Цитата
Gauss написал:
Подниму старую тему, но может кому пригодится.
А зачем вообще использовать 'Activate' и 'Select'. В сообщении #8 показано как правильно сделать и никаких ошибок не будет.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
А зачем вообще использовать 'Activate' и 'Select'. В сообщении #8 показано как правильно сделать и никаких ошибок не будет.
Во-первых. Я же написал "много лет". Зачем трогать то, что работает? Вот и было все хорошо до замены на Excel 2016.
Во-вторых. Забыл упомянуть, что предложенный вариант в сообщении #8 все равно не работает в случае с Visible = False. На что я и хотел акцентировать внимание в своем сообщении.
 
Цитата
Gauss написал:
Столкнулся с такой же проблемой, код написанный и работавший в Excel 2010 много лет перестал работать в Excel 2016
Цитата
Gauss написал:
Во-первых. Я же написал "много лет". Зачем трогать то, что работает?
два противоречащих выражения. И если уж переделывать то переделывать по уму а не костылями. вот это будет работать при любом Visible:

Код
Sub test()
  With Sheets("2")
    работа с диапазоном........ .Range("A1").......работа с диапазоном
End With
End Sub
Изменено: Nordheim - 16.05.2018 08:51:38
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
два противоречащих выражения. И если уж переделывать то переделывать по уму а не костылями. вот это будет работать при любом Visible:
Может не очень понятно выразился: но рабочей машине был обновлен Office c 2010 на 2016. И в связи с этим событием код перестал работать. Переписывать его никто не собирался специально (часто Вы переписываете тонны кода просто так?), при том что надо что бы работало здесь и сейчас. Но пришлось разбираться и придумывать костыли из-за возникшей ошибки, т.к. почему-то в Office 2016 при параметре Visible=False не работает метод Select для Range.
Собственно нет вижу смысла спорить надо использовать Select или нет. Я поделился особенностью работы и методом исправления конкретной ошибки.
 
Цитата
Gauss написал:
Собственно нет вижу смысла спорить надо использовать Select или нет
А никто и не спорит, просто озвучил , что лучше сразу избавится от Select, чем потом подставлять еще раз костыли.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Gauss написал:
часто Вы переписываете тонны кода просто так?
Просто так никогда, а в целях оптимизации всегда.
"Все гениальное просто, а все простое гениально!!!"
Страницы: 1
Наверх