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

Войти
Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ
33 240 Сообщений в 5 456 Тем от 6 756 Пользователей
Последний пользователь: Expert2024
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Ошибка: Невозможно получить свойство Item класса Buttons (VBA EXCEL 2003)
Страниц: [1]   Вниз
Печать
Автор Тема: Ошибка: Невозможно получить свойство Item класса Buttons (VBA EXCEL 2003)  (Прочитано 4779 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ratibor Redoran
Новичок
*

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

Сообщений: 6


Просмотр профиля E-mail
« : 29.03.2017, 14:40:35 »

Доброго времени суток!

Написал скрипт для создания кнопки на активном листе экселевской книги (при выполнении условия):

Код: (vb)

Public Sub CreateButton()
  c = ActiveCell.Column
  r = ActiveCell.Row

  ActiveSheet.Rows("1:1").RowHeight = 30

  ActiveSheet.Buttons.Add(2, 2, 120, 25).Select
  Selection.OnAction = "Saving"
  Application.CommandBars("Forms").Visible = False
  Selection.Characters.Text = "Сохранить"
  
  With Selection.Characters(Start:=1, Length:=12).Font
    .Name = "Arial Cyr"
    .Size = 14
  End With

  ActiveSheet.Cells(r, c).Select
End Sub

Public Sub DeleteButtons()
  For i = 1 To ActiveSheet.Buttons.Count
    'Строка кода, в которой обнаруживается ошибка
    If ActiveSheet.Buttons.Item(i).Caption = "Сохранить" Then '***
      ActiveSheet.Buttons.Item(i).Delete
    End If
  Next
End Sub

Public Sub Workbook_BeforeClose(Cancel As Boolean)
  DeleteButtons
End Sub

Public Sub Workbook_Open()
  If (/* Здесь проверяется условие для создания кнопки */) Then
    ButtonCreate
  End If
End Sub


Но на строке кода c комментарием "***" возникает сообщение об ошибке:
Run-time error '1004'
Невозможно получить свойство Item класса Buttons

Не могли бы вы подсказать, почему отсутствует свойство Item, если значение свойства Count указывает на то, что кнопки имеются?
« Последнее редактирование: 29.03.2017, 14:42:59 от Ratibor Redoran » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

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

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



Просмотр профиля WWW
« Ответ #1 : 29.03.2017, 15:15:13 »

У меня проблема не повторяется. И свойство получено, и кнопка удалена. Возможно, это проблемы файла. Можете приложить файл, в котором не работает? Или не работает в любом файле, даже только что созданном?
Записан

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

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

Сообщений: 6


Просмотр профиля E-mail
« Ответ #2 : 29.03.2017, 15:29:34 »

У меня проблема не повторяется. И свойство получено, и кнопка удалена. Возможно, это проблемы файла. Можете приложить файл, в котором не работает? Или не работает в любом файле, даже только что созданном?
Создал пустой файл - все работает...

Кажется начинаю понимать: если скопировать созданную кнопку (Ctrl-C -> Ctrl-V) несколько раз, то можно заметить (в отладчике), что после удаления кнопки ссылка на Item(i) уже отсутствует и поэтому возникает сообщение об ошибке. Надо заменить код
Код: (vb)

    If ActiveSheet.Buttons.Item(i).Caption = "Сохранить" Then '***  
      ActiveSheet.Buttons.Item(i).Delete  

на
Код: (vb)

    If ActiveSheet.Buttons.Item(1).Caption = "Сохранить" Then '***  
      ActiveSheet.Buttons.Item(1).Delete  

вроде все заработало, спасибо!
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

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

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



Просмотр профиля WWW
« Ответ #3 : 29.03.2017, 16:50:47 »

Тогда можно делать так(указывать всегда 1 тоже не очень правильно):
Код: (vb)
Public Sub DeleteButtons()
dim x
  For each x in ActiveSheet.Buttons
    'Строка кода, в которой обнаруживается ошибка 
    If x.Caption = "Сохранить" Then '*** 
      x.Delete 
    End If 
  Next 
End Sub

или использовать цикл с конца:
Код: (vb)
For i = ActiveSheet.Buttons.Count to 1 step -1
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Страниц: [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