2015-06-05 6 views
3

У меня есть код, который отлично работает, используя кнопки опций ActiveX. Тем не менее, я хочу, чтобы макрос работал на Mac, поэтому я пытаюсь заменить элементы управления ActiveX элементами управления формой. С помощью ActiveX, все, что я должен был сделать для того, чтобы проверить, если один из двух моих переключателей был выбран:Обнаружить, если в VBA выбрана кнопка управления формой.

Sub OptionButton1_Click 
    If OptionButton1.Value = true then 
     (action...) 
    End if 
    End sub 

Я пытался найти эквивалент для формы управления на Google, но каждый раз, когда я получаю:

требуется объект ошибки

большое спасибо за ваши ответы @ L42 и @Sai Nishank! Теперь, что, если я хочу проверить OptionButton_Click, если кнопка опции из другой группы истинна? Я попробовал этот синтаксис, но я получаю сообщение об ошибке: «Обобщение метода ошибок или данные не найдены»

Sub USDButton_Click() 
    MsgBox "USD" 
    If Sheet1.BTUButton = True Then 
    (action1) 
    End If 
    If Sheet1.kWhButton = True Then 
    (action2) 
    End If 

Я не уверен, если BTUButton правильного название кнопки, но я не где, чтобы проверить, управления формы не имеют, что под рукой «Щелкните правую кнопку мыши> Свойства», как ActiveX

+0

Ничего себе, я должен был это видеть. Извините ... Теперь, как я могу это сделать, скажем, я назвал его «Моя кнопка выбора 1»? Это не работает: 'Если Sheet1.«Моя кнопка выбора 1» = True Затем (action1) End If ' – Ettelaiv

+0

Вы можете сказать мне, что ур создает все в пользовательской форме или ur, используя элементы управления формой в листе excel. – Nishank

+0

Я использую элементы управления формой в листе excel. И ваши ответы, и L42 помогли мне понять это, спасибо! – Ettelaiv

ответ

1

сильного текст

Вы должны удалить .Value от кнопки вариант, так как кнопки выбора предназначены для истинного или ложного. Поэтому нет необходимости упоминать .value и попробовать это, он будет работать сейчас. и вы будете писать все там под commanbutton_click. потому что когда когда-либо щелкнули командную кнопку, действие кнопки опции будет запущено

И если вы хотите, чтобы o запускал действие при нажатии кнопки выбора, не записывайте, если цикл для этого.

Sub CommandButton1_Click 
    If OptionButton1 = true then 
    (action...) 
    End if 
    End sub 

Sub OptionButton1_Click 

(action...) 
End sub 
6

Если вы используете Form Control, вы можете получить такое же свойство, как ActiveX, используя OLEFormat.Object свойство Shape Object. А еще лучше назначить его в переменной, объявленной в OptionButton получить Intellisense удар в.

Dim opt As OptionButton 

With Sheets("Sheet1") ' Try to be always explicit 
    Set opt = .Shapes("Option Button 1").OLEFormat.Object ' Form Control 
    Debug.Pring opt.Value ' returns 1 (true) or -4146 (false) 
End With 

Но опять же, вы действительно не нужно знать значение.
Если вы используете Form Control, вы связываете с ним Macro или подпрограмму, которая выполняется, когда она выбрана. Поэтому вам просто нужно настроить подпрограмму, которая идентифицирует, какая кнопка нажата, а затем выполнить соответствующее действие для нее.

Например, у вас есть 2 Form Control Опция Кнопки.

Sub CheckOptions() 
    Select Case Application.Caller 
    Case "Option Button 1" 
    ' Action for option button 1 
    Case "Option Button 2" 
    ' Action for option button 2 
    End Select 
End Sub 

В приведенном выше коде у вас есть только одна подпрограмма, назначенная обеим кнопкам.
Затем вы проверяете, что вызвало подпрограмму, проверив Application.Caller.
Таким образом, нет необходимости проверять, является ли значение кнопки опции истинным или ложным.

+0

Спасибо за ваши ответы @ L42 и @Sai Nishank! Теперь, что, если я хочу проверить OptionButton_Click, если кнопка опции из другой группы истинна? Я попробовал этот синтаксис, но я получаю сообщение об ошибке: 'Sub USDButton_Click() MsgBox "USD" Если Sheet1.BTUButton = True Then (действие1) End If Если Sheet1.kWhButton = True Then (action2) End If' – Ettelaiv

+0

Какое сообщение об ошибке вы получаете, когда вы нажимаете кнопку команды. – Nishank

+0

«Ошибка компиляции метода или данных», я фактически отредактировал мой оригинальный вопрос с более подробной информацией, если вы хотите взглянуть. Спасибо @ Саи Нишанку !! – Ettelaiv