在公式更改时进行私有子运行

时间:2017-07-21 10:47:11

标签: excel vba

我已经找到了答案,却找不到。我有以下代码来动态命名一个按钮:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("E5")) Is Nothing Then _
Me.Buttons(1).Caption = Range("E5").Value
End Sub

其中“E5”与“D5”相关联,“D5”又与“A5”相关联 - 即当“A5”通过“D5”改变时“E5”更新。

如何更改此代码,以便在用户更改A5时子程序运行?我最终会在这个页面上有多个需要动态名称的按钮,所以最好的改变是在工作表上进行任何更改时运行所有私人潜艇的那个...如果可能的话!

非常感谢所有帮助 - 非常感谢!

DDT

1 个答案:

答案 0 :(得分:0)

你应该使用

Private Sub Worksheet_Change(ByVal Target As Range)

    ' if the cell being changed is A5
    If Target.Address = Me.Range("$A$5").Address Then
        ' if E5 is not blank
        If Me.Range("$E$5").Value2 <> vbNullString Then
            ' change the buttons Name
            Me.Buttons(1).Name = Me.Range("$E$5").Value2
        End If
    End If

End Sub

您的If Not Intersect(Target, Range("E5")) Is Nothing Then正在获得更改范围与Range("E5")的交集。由于Range("A5")永远不会与Range("E5")相交,因此您的代码将始终返回Nothing,因此始终会失败。

请注意,这会更改按钮 name ,但不会更改按钮上显示的文本。如果您希望按钮显示不同的文本,您只需选择按钮,然后在公式栏中将其公式设置为=$E$5