[英]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 ,但最好的做法是显式...并且由于ValidateWorksheetExists以False开头,因此无需再次将其设置为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.