Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Dr_Lex от 21.04.2015, 01:11

Название: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: Dr_Lex от 21.04.2015, 01:11
Проблема в следующем. Необходимо с помощью макроса задавать начальные значения чекбоксов. Но часть из них сгруппированы, дабы не расползались (они должны располагаться в определённых местах над картинкой). Чекбоксы, которые не сгруппированы управляются без проблем, а при попытке обратиться к этим макрос даёт сбой. Как это можно обойти?
Название: Re: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: NooBasTiK от 21.04.2015, 09:40
Цитировать2. К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.
Прикрепить к сообщению можно только файлы gif,jpg,rar,zip,7z,bas,frm,cls,docx,xlsx,xls размером до 1000 Кб.
Прикрепить файл можно в полной форме ответа на сообщение. Под окном для ввода сообщения нажмите на знак "+" возле текста "Дополнительные опции..."
Название: Re: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: Dr_Lex от 26.04.2015, 22:45
Я поэтому и писал этот вопрос в продолжении изначальной темы. Там и файл был. Хотя не вижу, зачем он здесь, но раз надо, прикрепляю.
Название: Re: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: cheshiki1 от 27.04.2015, 09:38
так попробуйте
Me.CheckBox1.Value = False
Me.CheckBox2.Value = False
Название: Re: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: Dr_Lex от 27.04.2015, 14:59
Попробовал вставить такой код
    With Worksheets("Оформление груза")
        .Me.CheckBox21.Value = False
        .Me.CheckBox22.Value = False
    End With

Но результат тот же. Макрос останавливается и требует отладки кода.
P.S. А что за оператор Me? Не нашёл его в справке.
P.P.S. Пробовал с помощью макроса сначала разгруппировать, а после выполнения действий сгруппировать заново, но макрос получается одноразовый. При каждой группировке получается новый номер группы, а так как таких групп несколько, и задействуются при разных макросах, получается, что даже счётчик номера группы сделать нельзя.
Название: Re: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: cheshiki1 от 27.04.2015, 15:18
точки перед Ме не нужно.
Ме - обращение (моя книга). тоже самое что This (текущая книга)
П.С. писал же в прошлой теме что кнопки не рабочие, зачем тот же файл цеплять.
ЦитироватьWhen you create a new application-level project for Excel, Visual Studio automatically creates a ThisAddIn.vb or ThisAddIn.cs code file. You can access the Application object by using Me.Application or this.Application.
Название: Re: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: Dr_Lex от 27.04.2015, 16:22
Не совсем понял, что значит кнопки не рабочие? Там всего одна кнопка и у меня она работает, запускает макрос.
Вывел обращение к галочкам из выражения With и убрал точки, то есть теперь просто:
    Range("B3").Select
    ActiveCell.FormulaR1C1 = _
        "='Вспомогательные расчёты'!R[10]C+'Вспомогательные расчёты'!R[12]C"
    Range("B5").Select
    ActiveCell.FormulaR1C1 = _
        "=IF('Вспомогательные расчёты'!R[-4]C,0,'Вспомогательные расчёты'!R[-3]C)"
    Range("B7").Select
    Selection.ClearContents
    Me.CheckBox21.Value = False
    Me.CheckBox22.Value = False
    With Worksheets("Оформление груза")
        .OLEObjects("ComboBox21").Object.ListIndex = 0
        .OLEObjects("OptionButton21").Object.Value = True
        .OLEObjects("OptionButton22").Object.Value = False
        .OLEObjects("OptionButton23").Object.Value = False
        .OLEObjects("OptionButton24").Object.Value = False
    End With
    Range("B12").Select

Но теперь макрос даже не запускается, сразу появляется надпись:
Compile error:
Invalid use of Me keyword
Насколько я понимаю, сие обозначает, что VBA не понимает такое обращение Me, либо я его как-то не так задаю.
Название: Re: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: cheshiki1 от 27.04.2015, 16:50
ЦитироватьНе совсем понял, что значит кнопки не рабочие?
уточняю - элементы ActiveX не реагируют на мышь.
такое чувство что это вообще картинки. хотя в режиме конструктора обзываются как нужно.
сохраните в xlsm и заархивируйте для выкладывания на форум.
Название: Re: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: Dr_Lex от 28.04.2015, 02:25
Может у вас отключены макросы, специально скачал с форума файл, у меня всё работает. На всякий случай заливаю с изменённым расширением (архиватора нет). Просто поменяйте расширение с .rar на .xlsm
Название: Re: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: cheshiki1 от 28.04.2015, 09:10
т.к. у вас все элементы связаны с ячейками то пойдем другим путем.
Sub Новый_заказ()
    Range("B3").FormulaR1C1 = _
        "='Вспомогательные расчёты'!R[10]C+'Вспомогательные расчёты'!R[12]C"
    Range("B5").FormulaR1C1 = _
        "=IF('Вспомогательные расчёты'!R[-4]C,0,'Вспомогательные расчёты'!R[-3]C)"
    Range("B7").ClearContents
    Range("B8") = 1
    With Worksheets("Вспомогательные расчёты")
    .Range("B1,B3,B8,B9,B10") = False
    .Range("B7") = True
    End With
    Range("B12").Select
End Sub

Название: Re: Управление сгруппированными элементами Active X с помощью VBA
Отправлено: Dr_Lex от 28.04.2015, 10:54
Вот я балбес! Даже не подумал подойти с этой стороны. Спасибо огромное, всё получилось!