工作表更改事件

时间:2017-09-27 10:54:29

标签: vba excel-vba excel

我有以下代码,我实际上想要根据I16的值重命名工作表。但是如果目标地址是空白/没有我希望退出子。 (这部分代码不起作用)。

如果有人可以建议我如何解决这个问题,我们将不胜感激。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range
Set KeyCells = Range("I16")
Dim WSname As String
WSname = Range("I16").Value

If KeyCells Is Nothing Then Exit Sub

Sheet23.Name = "BISSB"
Sheet25.Name = "RMIB"
Sheet26.Name = "MORIB"
Worksheets(WSname).Name = "Stage 3 V1"

End Sub

4 个答案:

答案 0 :(得分:2)

替换:

If KeyCells Is Nothing Then Exit Sub

使用:

If Trim(WSname) = "" Then Exit Sub

解释:您已在代码中使用Set KeyCells = Range("I16"),因此您设置了KeyCells范围,因此它永远不会是Nothing。 您想要检查KeyCells范围的值,并且您拥有WSname字符串变量。

答案 1 :(得分:1)

而不是

If KeyCells Is Nothing Then Exit Sub

使用

If IsEmpty(KeyCells) Then Exit Sub

ISEMPTY 功能可用于检查空白单元格。如果单元格为空,则会返回TRUE其他FALSE

答案 2 :(得分:0)

您已经声明并将KeyCells设置为" I16"。这就是为什么如果条件不起作用 - 因为KeyCells已经包含单元格。询问WSname =""如果它包含值或没有,请检查其他方式。

答案 3 :(得分:0)

我认为使用Change Event代码的正确方法是告诉代码何时自动触发并执行某些操作。

现在,每当工作表上的任何单元格发生变化时,您的代码都会被触发并执行代码中定义的操作。

我假设您想要触发更改事件代码并仅在单元格I16发生更改时执行一些预定义操作,然后根据代码重命名工作表。右吗

如果是这样,你可以尝试这样的事情......

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
Dim KeyCells As Range
Set KeyCells = Range("I16")
Dim WSname As String
WSname = Range("I16").Value

If Not Intersect(Target, KeyCells) Is Nothing Then
    If Target <> "" Then
        Sheet23.Name = "BISSB"
        Sheet25.Name = "RMIB"
        Sheet26.Name = "MORIB"
        Worksheets(WSname).Name = "Stage 3 V1"
    End If
End If
End Sub