0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 3
1

Ошибка при закрытии макроса с диаграммой "Object variable or With block variable not set"

18.12.2012, 00:17. Показов 2435. Ответов 5
Метки нет (Все метки)

Здравствуйте. Я только начал изучать VBA поэтому не закидывайте помидорами :black_eye.:
В общем, делал простенький макрос: с помощью кнопок ActiveX смена исходных данных диаграммы и изменения цвета заголовка. При закрытии MS Excel выдаёт ошибку: "run-time error '91': Object variable or With block variable not set."
Код выглядит так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Диаграмма()
 
entrprze = Cells(18, "G").Value
qrow = Cells(17, "G").Value + entrprze
  With ActiveSheet.ChartObjects("Диаграмма 1").Chart
    .SetSourceData Source:=Range("C3:N3,C" & qrow & ":N" & qrow)
    .ChartTitle.Text = "Отчёт за " & Cells(qrow, "B").Value & " квартал " & Cells(2 + entrprze, "B").Value
    .ChartStyle = entrprze + 16
    .ChartTitle.Font.ColorIndex = Cells(entrprze + 2, "B").Font.ColorIndex
               
  End With
End Sub
При запуске debug отсылает на строку With ActiveSheet.ChartObjects("Диаграмма 1").Chart. Имя диаграммы проверил и менял. Оно верное. Ошибка возникает только при закрытии программы. Сам макрос работает. Все функции выполняются. В чём может быть проблема?
Заранее спс.
Вложения
Тип файла: xls Диаграмма.xls (75.0 Кб, 10 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2012, 00:17
Ответы с готовыми решениями:

Ошибка "object variable or With block variable not set" при попытке обращения к форме. VBA Access 7.0.
Добрый день. Данный код Dim frm As Form Set frm = Form_frmAdd_EditWareList ...

ошибка "Run-time error '91': Object variable or With block variable not set"
приветствую! имеется документ на нескольких листах, заполняется по дням соответственно на многих...

Работа с БД MS Access и ошибка "object variable or with block variable not set"
В источниках данных ODBC есть такая штука "База данных MS Access", и назначена ей база "D:\БД...

Вылетает ошибка "Object variable or With block variable not set"
Всем привет! Вот такой код. Вылетает ошибка "Object variable or With block variable not set" -...

5
16 / 16 / 0
Регистрация: 10.09.2012
Сообщений: 113
18.12.2012, 02:27 2
Если сначала закрывать книгу - то ошибки не возникнет.

Если же сразу закрывать приложение , то срабатывают обработчики для ComboBox1 и ComboBox2, запускается процедура Диаграмма, но ActiveSheet уже не привязан к листу книги:ActiveSheet= Nothing, что приводит к ошибке.

Решить проблему можно, обработав событие закрытия книги на уровне объекта Application (не на уровне Workbook).

Создать объект Application, который будет реагировать на события можно через пользовательские классы (что сложновато).

Хотя, наверное все можно сделать гораздо проще,например, для данного конкретного случая можно ограничиться перехватом и обработкой ошибки.

Управление ошибками в VBA. Операторы On Error, Resume, объект Err
1
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 3
18.12.2012, 02:35  [ТС] 3
Цитата Сообщение от Maxsss Посмотреть сообщение
Хотя, наверное все можно сделать гораздо проще,например, для данного конкретного случая можно ограничиться перехватом и обработкой ошибки.
Благодарю за развёрнутое пояснение. Не подскажете ли, как сделать перехват обработанной ошибки? Ссылка, которую Вы скинули, информативная и весьма полезная, но на данный момент моя база знаний по VBA недостаточна, чтобы разобраться в этом. Освою это на более позднем этапе обучения.
Попробовал ещё вместо ActiveSheet обратиться к объекту sheets("Лист1"), но на этот раз также сработала ошибка, но другая: Run-time error '1004': Method 'Sheets' of object '_Global' failed
0
5467 / 1147 / 50
Регистрация: 15.09.2012
Сообщений: 3,512
18.12.2012, 08:54 4
Титёф, вы какое-то свойство задали ComboBoxу, что у него событие срабатывет при закрытии книги. Что это за свойство - я не знаю - нужно время потратить, чтобы изучить все свойства ComboBox.

Удалите ваши ComboBoxы и сделайте их заново. Только задайте одно свойство: ListFillRange, а остальные свойства не трогайте.
1
16 / 16 / 0
Регистрация: 10.09.2012
Сообщений: 113
18.12.2012, 10:08 5
Титёф, если хотите воспользоваться обработкой ошибок, вставьте перед строчкой
Visual Basic
1
With ActiveSheet.ChartObjects("Диаграмма 1").Chart
строчку
Visual Basic
1
On Error Resume Next
- эта конструкция игнорирует все ошибки в процедуре.

А для выяснения, какое свойство меняется (если есть желание), в позновательных целях можно перед строчкой With ActiveSheet.ChartObjects("Диаграмма 1").Chart вставить Debug.Print ComboBox1.Visible, сделать активным Immediate Window в редакторе VBA и, меняя свойства ComboBox, выяснить, что же меняентся перед закрытием.
1
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 3
18.12.2012, 16:28  [ТС] 6
Цитата Сообщение от Скрипт Посмотреть сообщение
Титёф, вы какое-то свойство задали ComboBoxу, что у него событие срабатывет при закрытии книги. Что это за свойство - я не знаю - нужно время потратить, чтобы изучить все свойства ComboBox.
Удалите ваши ComboBoxы и сделайте их заново. Только задайте одно свойство: ListFillRange, а остальные свойства не трогайте.
Хммм...это идея. Возможно. Спасибо большое. Попробую.


Цитата Сообщение от Maxsss Посмотреть сообщение
Титёф, если хотите воспользоваться обработкой ошибок, вставьте перед строчкой
Благодарю! Буду пробовать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2012, 16:28
Помогаю со студенческими работами здесь

"Object variable or With block variable not set "
Всем доброго дня !! Sub oop() Dim ra As Range ra = Range("A239:A255") For Each Cell In ra...

Создание класса и ошибка 'object variable or with block variable not set'
Всем привет! Почему когда описываешь класс вот так: Dim a, b, c As Integer Private Sub...

Что за ошибка object variable or with block variable not set
У меня оффис 2010. Подскажите почему выдает ошибку object variable or with block variable not set и...

Ошибка: <Object variable or With block variable not set>
Ну что здесь может не нравиться? Set Поиск = Worksheets(&quot;Лист1&quot;).Columns(&quot;H:H&quot;).Find(what:=ячк)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru