重命名工作簿中的工作表不能完美工作。

问题描述 投票:0回答:1

谁能看看这段代码,看看为什么它一直在重命名两张表,而这两张表根据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
vba excel-vba
1个回答
2
投票

你的代码有3个错误

  1. 你用的是 ActivateActive 产生了第二个错误。阅读 这个 关于如何避免这些。
  2. 你在检查名称的 ActiveSheet 在...之前 ws.Activate 所以它总是会检查前一张纸。
  3. 你的条件是 Or. Main <> Fixed 所以它将改变他们的名字反正因为 Main 不是 Fixed 并满足你的第二部分 Or 反之亦然。使用 And 强制代码检查是否满足这两个条件。

这是没有使用 ActivateSelect:

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
© www.soinside.com 2019 - 2024. All rights reserved.