我在excel 2013中有一个工作表,上面有25个activex按钮。根据每个按钮的单元格值,我希望它是可见的或隐藏的。在我的情况下,单元格U6的值使我的commandbutton1可见,U7将使commandButton2可见。...仅我的CommandButton1正常工作。我尝试了不成功的不同代码组合。
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
答案 0 :(得分:2)
If Range("U6") = 1 Then
不是应该检查Target
(即修改后的单元格)是否在U列中吗?
Sheets("Feuil1").CommandButton1.Visible = True
那条通向田园的道路,您不想去那里:提取一种方法。您将需要查询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控件的可见性(给定名称)。
因此,在Worksheet_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
或类似的东西。注意:在答案框中编写的代码未经测试,仅供说明。复制粘贴由您自担风险。