2016-09-08 1 views
1

Мой код проходит через все существующие OLEObjects в текущем листе в книге Excel. Я хочу, чтобы он нашел конкретный (на основе имени, переданного суб), который всегда CheckBox и назначил его переменной типа CheckBox.VBA: Назначить общий OLEObject переменной CheckBox

Примечание: другие объекты не все флажки, следовательно, общий тип OLEObject.

Пример кода, который вызывает к югу, показывая пример имени:

HandleCheckBoxClick("chkAddSummary") 

Sub, который выглядит для этого конкретного объекта:

Sub HandleCheckBoxClick(nm As String) 

    Dim o As OLEObject 
    Dim cb As CheckBox 

    For Each o In Me.OLEObjects 
     If o.name = nm Then 
      Set cb = o 
     End If 
    Next o 

End Sub 

я нашел очень похожий вопрос на: Excel VBA: how to cast a generic control object into a ComboBox object? но он относится для создания элементов управления (а не элементов управления ActiveX). Я попробовал метод, указанный в ответе, чтобы узнать, может ли он передаваться между двумя типами управления, но не имел успеха.

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

Я также попытался использовать метод OLEObject.progID, чтобы убедиться, что o является объектом checkbox. Ошибка, которую я получаю при попытке Set cb = o, является несоответствием типа.

ответ

1

Когда объявлен как MSForms.CheckBox тогда должно быть возможно назначить o.Object.

Sub test() 
    HandleCheckBoxClick "chkAddSummary" 
End Sub 

Sub HandleCheckBoxClick(nm As String) 

    Dim o As OLEObject 
    Dim CB As MSForms.CheckBox 

    For Each o In Me.OLEObjects 
     If o.Name = nm Then 
      Set CB = o.Object 
     End If 
    Next o 

End Sub 
0

Я не смог найти (до сих пор), как назначить его CheckBox, я нашел, как назначить его переменной OLEObject (если это вам поможет).

Sub HandleCheckBoxClick(nm As String) 

Dim o   As OLEObject 
Dim CB   As CheckBox 
Dim oleObj  As OLEObject 

' loop though all OLEObjects in "Sheet2" >> modify to your sheet name 
For Each o In Sheets("Sheet2").OLEObjects 
    If TypeName(o.Object) = "CheckBox" Then 
     Debug.Print o.Name 

     ' if you have more then 1 CheckBox 
     If o.Name = nm Then 
      Set oleObj = o 
'   Set CB = o.Select 
     End If 
    End If 
Next o 

' just to test the options with OLEObject variable 
With t 
    t.Top = 100 
    If t.Object.Value = True Then 
     MsgBox "CheckBoX " & nm & " is selected" 
    Else 
     MsgBox "CheckBoX " & nm & " is not selected" 
    End If 
End With 

End Sub 
Смежные вопросы