谁能看看这段代码,看看为什么它一直在重命名两张表,而这两张表根据IF语句应该被跳过。我打算重命名所有单元格为 "G2 "的工作表,除了名为 "Main "和 "Fixed "的两个工作表。
Sub RenameSheets()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
'With ActiveWorkbook.ActiveSheet
If ActiveWorkbook.ActiveSheet.Name <> "Main" Or ActiveWorkbook.ActiveSheet.Name <> "Fixed" Then
ws.Activate
If Range("G2").Value = "" Then
ActiveSheet.Name = Range("G2").End(xlDown).Value
Else: ActiveSheet.Name = Range("G2").Value
End If
Else:
GoTo Nextsv
End If
Nextsv: Next ws
Sheets("Main").Activate
ActiveSheet.Cells(1, 1).Select
End Sub
你的代码有3个错误
Activate
和 Active
产生了第二个错误。阅读 这个 关于如何避免这些。ActiveSheet
在...之前 ws.Activate
所以它总是会检查前一张纸。Or
. Main
<> Fixed
所以它将改变他们的名字反正因为 Main
不是 Fixed
并满足你的第二部分 Or
反之亦然。使用 And
强制代码检查是否满足这两个条件。这是没有使用 Activate
或 Select
:
Option Explicit
Sub RenameSheets()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "Main" And ws.Name <> "Fixed" Then
With ws
If .Range("G2") = vbNullString Then
.Name = .Range("G2").End(xlDown)
Else
.Name = .Range("G2")
End If
End With
End If
Next ws
End Sub