Vba 多个ActiveX按钮可见/隐藏
我在excel 2013中有一个工作表,上面有25个activex按钮。根据每个按钮的单元格值,我希望它可见或隐藏。在我的例子中,单元格U6的值使我的commandbutton1可见,而U7将使commandButton2可见。。。。只有我的CommandButton1工作正常。我尝试过不同的代码组合,但没有成功Vba 多个ActiveX按钮可见/隐藏,vba,Vba,我在excel 2013中有一个工作表,上面有25个activex按钮。根据每个按钮的单元格值,我希望它可见或隐藏。在我的例子中,单元格U6的值使我的commandbutton1可见,而U7将使commandButton2可见。。。。只有我的CommandButton1工作正常。我尝试过不同的代码组合,但没有成功 Private Sub CommandButton1_Click() End Sub Private Sub Worksheet_Change(ByVal Ta
Private Sub CommandButton1_Click()
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'ActiveX button1
If Range("U6") = 1 Then
Sheets("Feuil1").CommandButton1.Visible = True
Else
Sheets("Feuil1").CommandButton1.Visible = False
End If
End Sub
是否应该检查目标(即修改的单元格)是否在U列中
这条路通向pastaland,你不想去那里:提取一个方法。您需要查询OLEObjects
集合,以按名称获取ActiveX控件,而不是将按钮名称硬编码25次以上
Private Sub SetControlVisibility(ByVal controlName As String, ByVal isVisible As Boolean)
Dim axControl As OLEObject
On Error Resume Next 'next statement may throw error #9
Set axControl = Me.OLEObjects(controlName)
If axControl Is Nothing Then Exit Sub
On Error GoTo 0 'restore error handling
axControl.Object.Visible = isVisible
End Sub
现在,您有了一个方法,可以切换工作表上任何ActiveX控件的可见性(给定其名称)
因此,在工作表\u Change
处理程序中,您现在只需要计算ActiveX控件的名称,以及是否希望它可见:
Private Sub Worksheet_Change(ByVal Target As Range)
'bail out if the modified cell isn't interesting, or if it's more than 1 cell:
If Intersect(Target, Me.Range("U6:U31") Is Nothing Or Target.Count <> 1 Then Exit Sub
Dim buttonName As String
buttonName = "CommandButton" & Target.Row - 5
Dim isVisible As Boolean
isVisible = Target.Value = 1
SetControlVisibility buttonName, isVisible
End Sub
Private子工作表\u更改(ByVal目标作为范围)
'如果修改后的单元格不感兴趣,或者如果超过1个单元格,则退出:
如果Intersect(目标,Me.Range(“U6:U31”)为空或Target.Count 1,则退出Sub
朦胧的纽扣名称如细绳
buttonName=“CommandButton”&Target.Row-5
Dim可视为布尔值
isVisible=Target.Value=1
SetControlVisibility按钮名称,isVisible
端接头
或者类似的东西。注意:代码写在答案框中,未经测试&仅用于说明目的。复制意大利面,风险自负
是否应该检查目标(即修改的单元格)是否在U列中
这条路通向pastaland,你不想去那里:提取一个方法。你需要查询OLEObjects
集合,以按名称获取ActiveX控件,而不是将按钮名称硬编码25次以上
Private Sub SetControlVisibility(ByVal controlName As String, ByVal isVisible As Boolean)
Dim axControl As OLEObject
On Error Resume Next 'next statement may throw error #9
Set axControl = Me.OLEObjects(controlName)
If axControl Is Nothing Then Exit Sub
On Error GoTo 0 'restore error handling
axControl.Object.Visible = isVisible
End Sub
现在,您有了一个方法,可以切换工作表上任何ActiveX控件的可见性(给定其名称)
因此,在工作表\u Change
处理程序中,您现在只需要计算ActiveX控件的名称,以及是否希望它可见:
Private Sub Worksheet_Change(ByVal Target As Range)
'bail out if the modified cell isn't interesting, or if it's more than 1 cell:
If Intersect(Target, Me.Range("U6:U31") Is Nothing Or Target.Count <> 1 Then Exit Sub
Dim buttonName As String
buttonName = "CommandButton" & Target.Row - 5
Dim isVisible As Boolean
isVisible = Target.Value = 1
SetControlVisibility buttonName, isVisible
End Sub
Private子工作表\u更改(ByVal目标作为范围)
'如果修改后的单元格不感兴趣,或者如果超过1个单元格,则退出:
如果Intersect(目标,Me.Range(“U6:U31”)为空或Target.Count 1,则退出Sub
朦胧的纽扣名称如细绳
buttonName=“CommandButton”&Target.Row-5
Dim可视为布尔值
isVisible=Target.Value=1
SetControlVisibility按钮名称,isVisible
端接头
或者类似的东西。注意:代码写在回答框中,未经测试&仅用于说明目的。复制意大利面,风险自负。如果范围(“U6”)=1
,该代码看起来确实可以使命令按钮1
可见。您尝试过哪些其他按钮不起作用,以及如何定义“不工作”?您是否收到错误?没有得到您期望的结果?其他什么?那么…您向我们展示了正在工作的代码,并询问为什么我们没有看到的代码不工作?该代码看起来确实可以让CommandButton1
在范围(“U6”)中可见=1
。您对其他不起作用的按钮做了哪些尝试,以及如何定义“不起作用”?您是否遇到错误?没有得到预期的结果?其他问题?那么……您向我们展示了起作用的代码,并问我们为什么看不到的代码不起作用?