首页 > 解决方案 > IF 语句问题不适用于选择

问题描述

我试图制作这段代码,但仍然有问题。

问题很简单——

If sheet2 exists then 
     ThisWorkbook.Sheets(Sheet1).Range(a1).Select
If does not exist then    
     Set ws = Worksheets.Add(after:=Worksheets("Sheet1")) ws.Name = "Sheet2"

但是在添加 sheet2 之后它仍然给出错误。下面是代码:

Sub new6()
    
    Dim wb          As Workbook
    Dim ws          As Worksheet
    Set wb = ActiveWorkbook
    For Each ws In wb.Worksheets
        
        If ws.Name <> "Sheet2" Then
            Set ws = Worksheets.Add(after:=Worksheets("Sheet1"))
            ws.Name = "Sheet2"
        Else
            ThisWorkbook.Sheets(Sheet1).Range(a1).Select
        End If
    Next
End Sub

标签: excelvba

解决方案


我认为您需要通过实施@Tim Williams的出色解决方案来改变您的方法并完全消除该循环。您的代码的问题是您在验证该工作表是否存在于书中之前添加了一个新工作表。


添加WorksheetExists将扫描整个工作簿以查找没有循环的工作表并返回的功能WorksheetExists = TRUE or FALSE。从那里您可以通过删除循环并作用于函数的结果来简化宏。

你也可以Select在这里避免Application.Goto

Sub new6()

Dim ws As Worksheet

If WorksheetExists("Sheet2", ActiveWorkbook) Then
    Application.Goto (Sheets("Sheet1").Range("A1"))
Else
    Set ws = Worksheets.Add(After:=Worksheets("Sheet1"))
    ws.Name = "Sheet2"
End If

End Sub

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet
    
    If wb Is Nothing Then Set wb = ThisWorkbook
        On Error Resume Next
        Set sht = wb.Sheets(shtName)
        On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
    
End Function

推荐阅读