我对SO进行了很好的扫描,但无法找到解决方案。
d
dim Ctrl as OLEObject
With ActiveSheet
'
' change button colour
'
For Each Ctrl In OLEObjects
If TypeName(Ctrl.Object) = "ToggleButton" Then
If Ctrl.Name = Tgl_butt Then
If BooValue = True Then
OLEObjects(Ctrl.Name).Object.BackColor = RGB(255, 255, 0) ' in = yellow
Else
OLEObjects(Ctrl.Name).Object.BackColor = RGB(184, 204, 228) 'out = blue
End If
End If
End If
Next Ctrl
End With
我现在正试图将此代码放入一个模块中,以便所有包含切换按钮的工作表可以共享它。
Call do_filter(Tgl_but.Value, "Tgl_name", Ctrl)
然后在模块中..
Public Sub do_filter(BooValue As Boolean, Tgl_butt As String,Ctrl As OLEObject)
With ActiveSheet
Dim myCtrl 'As OLEObject
For Each myCtrl In Ctrl
If TypeName(myCtrl.Object) = "ToggleButton" Then
If myCtrl.Name = Tgl_butt Then
If BooValue = True Then
Ctrl(myCtrl.Name).Object.BackColor = RGB(255, 255, 0) ' in = yellow
Else
Ctrl(myCtrl.Name).Object.BackColor = RGB(184, 204, 228) 'out = blue
End If
End If
End If
Next myCtrl
End With
上面的代码出现“需要对象”错误。 Ctrl对象是空的...所以我想我某处有一些严重的错误!我已经尝试了很多这个代码的变体,但似乎无法让它工作!欢迎所有建议!
答案 0 :(得分:0)
因此,您最初将代码放在工作表类中,并且它有效。然后你在一个模块中推广它,它不起作用。是吗?
如果是这种情况,我估计:
使用您定义的代码:
With ActiveSheet
但不要使用。部分作为With的一部分。因为它没有被使用,所以没有用。 我认为你需要对这个对象进行限定。
所以我会尝试使用ActiveSheet.OleObjects(或者如果使用With,则在OleObjects集合前放置一个。)。
希望对你有用。
答案 1 :(得分:0)
Dim inputsheet As Worksheet
Set inputsheet = Worksheets("blah")
Call change_colour(Tgl_EHCP.Value, "Tgl_name", inputsheet.OLEObjects("Tgl_name"))
Public Sub change_colour(BooValue As Boolean, Tgl_butt As String, tgl_button As OLEObject)
'
' change button colour
'
With ActiveSheet
Dim myCtrl As OLEObject
If BooValue = True Then
tgl_button.Object.BackColor = RGB(255, 255, 0)
Else
tgl_button.Object.BackColor = RGB(184, 204, 228)
End If
End With
End Sub