Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
29.03.2024, 13:26:26

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Ошибка Method 'Value' of object 'Range' failed
Страниц: [1]   Вниз
Печать
Автор Тема: Ошибка Method 'Value' of object 'Range' failed  (Прочитано 13795 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Printmaster
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля E-mail
« : 06.07.2015, 11:24:03 »

Добрый день!

Есть код.

Код: (vb)
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim books As Range
    Set books = ActiveWorkbook.Names("bookbase").RefersToRange
    If Not Intersect(books, Target) Is Nothing Then
        Select Case books.Cells(4, 3)
        Case "пружина"
            books.Cells(3, 5).Value = "длина пружины"
            books.Cells(3, 6).Value = "диаметр"
        Case "скрепка"
            books.Cells(3, 5).Value = "кол-во скрепок"
            books.Cells(3, 6).Value = Null
        Case Else
            books.Cells(3, 5).Value = Null
            books.Cells(3, 6).Value = Null
        End Select
   End If
End Sub


Excel выдает ошибку "Run time error ‘-2147417848 (80010108). Method 'Value' of object 'Range' failed" и вообще потом вылетает. В чем может быть дело?
Записан
Alex_Gur
Старожил
****

Репутация: +11/-0
Офлайн Офлайн

Сообщений: 278


Просмотр профиля
« Ответ #1 : 06.07.2015, 12:02:12 »

Насколько я понимаю, данная ошибка может быть связана с вызовом или использованием объекта, который не существует.
К сожалению, точнее сказать не смогу. Грустный
Записан

Мы заинтересованы не только решить ваши задачи, но и помочь вам научиться решать их самостоятельно.
"Дай человеку рыбу, и он будет сыт весь день. Научи человека ловить рыбу, и он будет сыт всю жизнь" Улыбка
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #2 : 06.07.2015, 12:35:28 »

Что содержится в "books "?
Лучше приложите файл с именем для books и данными. Возможно, дело не только в коде.
Плюс неплохо бы знать на какой строке вообще ошибка возникает.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Printmaster
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля E-mail
« Ответ #3 : 07.07.2015, 08:18:48 »

Описываю кратко задачу. Это часть кода формирующего калькуляцию для расчета заказов типографии. В частности, этот модуль отрабатывает следующую задачу - в зависимости от выбранного типа шитья для брошюры, он создает заголовки-подсказки для введения дополнительных данных. Для скрепления на скрепку - это количество скрепок, для пружинного переплета - это длина пружины и ее диаметр, для склейки никаких дополнительных данных вводить не надо, поэтому заголовки просто удаляются. Файл прилагаю. Все лишнее я из него удалил, для упрощения анализа.

Ошибка возникает в строчках обработки событий. Т.е. именно в Case-структуре, когда осуществляется попытка присвоить значение ячейкам. Например, когда выбирается пружинный переплет ошибка происходит в этих строчках:
Код: (vb)

books.Cells(3, 5).Value = "диаметр пружины"
books.Cells(3, 6).Value = "длина"


Записан
Alex_Gur
Старожил
****

Репутация: +11/-0
Офлайн Офлайн

Сообщений: 278


Просмотр профиля
« Ответ #4 : 07.07.2015, 09:24:10 »

Мне кажется, проблема заключается в формировании выпадающего списка E20:F20 для ячейки Формат.
Там идет ссылка на именованный диапазон =_станд_фор. Однако, данного именованного диапазона я почему-то не нахожу.
Попробуйте пересоздать выпадающий список E20:F20.
Записан

Мы заинтересованы не только решить ваши задачи, но и помочь вам научиться решать их самостоятельно.
"Дай человеку рыбу, и он будет сыт весь день. Научи человека ловить рыбу, и он будет сыт всю жизнь" Улыбка
Printmaster
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля E-mail
« Ответ #5 : 07.07.2015, 09:28:47 »

Нет. Этот список существует в полной версии калькуляции и он нормально отрабатывается. Просто в файле, что я прикрепил, я убрал все лишние листы и списки, которые не участвуют в коде. Ошибка точно не из-за этого. Можете попробовать убрать ссылки на другие списки и убедиться что код работать все равно не будет.
Записан
Alex_Gur
Старожил
****

Репутация: +11/-0
Офлайн Офлайн

Сообщений: 278


Просмотр профиля
« Ответ #6 : 07.07.2015, 09:45:40 »

Еще есть такое впечатление, что после изменения одной ячейки управление переходит на начало макроса
Код: (vb)
Private Sub Worksheet_Change(ByVal Target As Range)

Например, я выбрал:
Код: (vb)
Case "пружина"

Выполнилась строка
Код: (vb)
books.Cells(3, 5).Value = "диаметр пружины"

и произошел переход на начало макроса.
То есть Worksheet_Change запускается при любом изменении листа.
Попробуйте переименовать макрос Worksheet_Change.

« Последнее редактирование: 07.07.2015, 10:28:07 от vikttur » Записан

Мы заинтересованы не только решить ваши задачи, но и помочь вам научиться решать их самостоятельно.
"Дай человеку рыбу, и он будет сыт весь день. Научи человека ловить рыбу, и он будет сыт всю жизнь" Улыбка
Printmaster
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля E-mail
« Ответ #7 : 07.07.2015, 10:23:38 »

Да, спасибо. Вы правы. Действительно, программа входила в бесконечный цикл. Я на стал менять наименование макроса, потому что при иных случаях не отрабатывается событие изменения ячейки, я изменил условие выполнения, указав на конкретную ячейку и все заработало:
Код: (vb)
If Not Intersect(books.Range("C4"), Target) Is Nothing Then


Спасибо!
Записан
RAN
Эксперты
Старожил
*

Репутация: +43/-0
Офлайн Офлайн

Сообщений: 440



Просмотр профиля E-mail
« Ответ #8 : 07.07.2015, 10:37:15 »

Отключайте обработку событий.
Код: (vb)
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim books As Range
    Set books = ActiveWorkbook.Names("bookbase").RefersToRange
    If Not Intersect(books, Target) Is Nothing Then
        Application.EnableEvents = False
        Select Case books.Cells(4, 3)
        Case "пружина"
            books.Cells(3, 5).Value = "диаметр пружины"
            books.Cells(3, 6).Value = "длина"
        Case "скрепка"
            books.Cells(3, 5).Value = "кол-во скрепок"
            books.Cells(3, 6).Value = Null
        Case Else
            books.Cells(3, 5).Value = Null
            books.Cells(3, 6).Value = Null
        End Select
    End If
    Application.EnableEvents = True
End Sub

Либо удаляйте ячейки, в которые производится запись, из диапазона books.
Записан

А что ты умеешь?
Учиться...
Alex_Gur
Старожил
****

Репутация: +11/-0
Офлайн Офлайн

Сообщений: 278


Просмотр профиля
« Ответ #9 : 07.07.2015, 10:47:50 »

Цитировать
Excel выдает ошибку "Run time error ‘-2147417848 (80010108). Method 'Value' of object 'Range' failed" и вообще потом вылетает.
Таким образом, можно сделать вывод, что ошибка "Run time error ‘-2147417848 (80010108). Method 'Value' of object 'Range' failed" может быть вызвана также бесконечным циклом.
Записан

Мы заинтересованы не только решить ваши задачи, но и помочь вам научиться решать их самостоятельно.
"Дай человеку рыбу, и он будет сыт весь день. Научи человека ловить рыбу, и он будет сыт всю жизнь" Улыбка
Alex_Gur
Старожил
****

Репутация: +11/-0
Офлайн Офлайн

Сообщений: 278


Просмотр профиля
« Ответ #10 : 07.07.2015, 11:18:12 »

Еще можно сделать так: создать массив и поместить соответствующие значения в ячейках за одно действие:

Код: (vb)
Dim Mass1(1) As String
Mass1(0) = "диаметр пружины"
Mass1(1) = "ширина"
...
    Case "пружина"
          books.Cells(3, 5).Range("A1").Resize(, 2) = Mass1

Записан

Мы заинтересованы не только решить ваши задачи, но и помочь вам научиться решать их самостоятельно.
"Дай человеку рыбу, и он будет сыт весь день. Научи человека ловить рыбу, и он будет сыт всю жизнь" Улыбка
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru