繁体   English   中英

检查工作表是否按名称存在

[英]Check if worksheet exists by name

我想验证工作表是否存在,如果不存在,则要求用户输入从存在的工作表中选择一个工作表。 查看一篇文章中的信息,我想出了一个返回布尔值的函数,然后我将提示结果是否为假。

我遇到的一个问题是,我输入的自定义工作表名称返回false,但是默认的“ Sheet1” ...返回true。 查看对象模型时,我没有看到为Worksheets.Name.Value列出的对象模型,也没有看到项目浏览器,发现该表被列为`Sheet 1(宏变量)。

如何在括号中引用工作表的名称,以便函数可以正常工作,或者如果无法使用工作表名称,是否有更好的解决方案?

这是我的代码

    Sub TestBed()
    Dim wb As Workbook, test As Boolean, debugStr As String, wsNames() As String
    Set wb = ThisWorkbook
    Debug.Print "List of sheets in this workbook"

    For i = 1 To wb.Worksheets.count
        ReDim Preserve wsNames(i - 1)
        wsNames(i - 1) = wb.Worksheets(i).Name
        debugStr = debugStr & wsNames(i - 1) & " | "
    Next i

    Debug.Print debugStr
    debugStr = ""

    For i = LBound(wsNames) To UBound(wsNames)
        test = ValidateWorksheetExists(wsNames(i), wb)
        debugStr = debugStr & wsNames(i) & " = " & test & " | "
    Next i

    Debug.Print debugStr
End Sub

Function ValidateWorksheetExists(sName As String, Optional wb As Workbook) As Boolean

If wb Is Nothing Then Set wb = ThisWorkbook

    With wb
        For i = 1 To .Worksheets.count
            If wb.Worksheets(i).Name = sName Then
                ValidateWorksheetExists = True
            Else
                ValidateWorksheetExists = False
            End If
        Next i
    End With
End Function

您需要在之后立即退出函数:

ValidateWorksheetExists = True

否则, i的下一次迭代将再次将其设置为False

(可能还有其他错误)

尽管声明时布尔值变量(在这种情况下为err函数)默认为False ,但最好的做法是显式...并且由于ValidateWorksheetExistsFalse开头,因此无需再次将其设置为False 这样做会还原在先前的“ i ”迭代中设置的可能的True状态。

Function ValidateWorksheetExists(sName As String, Optional wb As Workbook) As Boolean

If wb Is Nothing Then Set wb = ThisWorkbook

ValidateWorksheetExists = False

    With wb
        For i = 1 To .Worksheets.count
            If wb.Worksheets(i).Name = sName Then
                ValidateWorksheetExists = True
            End If
        Next i
    End With
End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM