Vba 通过功能禁用按钮?

Vba 通过功能禁用按钮?,vba,excel,excel-2007,Vba,Excel,Excel 2007,当前正在将vba与excel 2007一起使用 我目前正在测试函数的功能,在使用按钮时有点卡住了。我有两个按钮,分别命名为1和2。按下其中一个按钮调用一个函数Calc,每个按钮都传递其他名称的变量。详情如下: Private Sub ONE_Click() Calc TWO End Sub Private Sub TWO_Click() Calc ONE End Sub Function Calc(B As CommandButton) B.Enabled = False End Funct

当前正在将vba与excel 2007一起使用

我目前正在测试函数的功能,在使用按钮时有点卡住了。我有两个按钮,分别命名为1和2。按下其中一个按钮调用一个函数Calc,每个按钮都传递其他名称的变量。详情如下:

Private Sub ONE_Click()
Calc TWO
End Sub

Private Sub TWO_Click()
Calc ONE
End Sub

Function Calc(B As CommandButton)
B.Enabled = False
End Function
Private Sub Reset_Click()
ONE.Enabled = True
TWO.Enabled = True
End Sub
我的理解是,按下按钮1将变量2传递给函数Calc,然后禁用按钮2

我还有一个标有重置的按钮,其作用如下:

Private Sub ONE_Click()
Calc TWO
End Sub

Private Sub TWO_Click()
Calc ONE
End Sub

Function Calc(B As CommandButton)
B.Enabled = False
End Function
Private Sub Reset_Click()
ONE.Enabled = True
TWO.Enabled = True
End Sub
结果是,如果我按下按钮一,按钮二变灰并显示“禁用”。但是,当我按下重置按钮时,它保持灰色。调查按钮的属性可以发现它实际上并没有被禁用。我安装了另一个按钮,它直接禁用按钮2,即2.Enabled=False,而不是使用变量

使用“直接”按钮直接禁用按钮时,重置将按应启用按钮,并且属性反映该按钮已禁用

有人知道为什么使用变量禁用这样的按钮会导致虚幻的禁用吗?
更好的是,如何克服这个问题?

如果您在通过不正确的引用调用时遇到问题,那么请使用静态参数

Private Sub ONE_Click()
    Calc "TWO"
End Sub

Private Sub TWO_Click()
    Calc "ONE"
End Sub
现在可以使用该参数对对象进行操作

Function Calc(B As String)
If B = "ONE" Then
    ONE.Enabled = False
ElseIf B = "TWO" Then
    TWO.Enabled = False
Else
    Exit Function
End If
End Function

我运行了你的代码,没有发现不需要的beheaviour。在Excel 2007和Excel 2016中,按下“重置”按钮将始终启用其他按钮来运行代码,并具有与Frank Zed相同的行为。