我有以下代码,我实际上想要根据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
答案 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