excel - 循环浏览工作表以查看工作表名称是否已被占用 - 循环中的 Len/Left 函数
问题描述
我在下面遇到问题。我的代码基本上是一个排序功能,它从另一个工作表中提取数据以便为用户提供正确的视图,但是如果用户两次选择相同的产品,我的代码会产生错误,因为信息表已经在工作簿中。
因此,我只是希望它选择工作表,如果工作表已经在工作簿中,而不是再次运行代码。
我的问题是,有时工作表名称会超过 31 个字符,这就是我使用 left/len 函数的原因。问题是它无法将现有的工作表名称识别为
Left(Myvalue & " Case Types", 31)
因此即使工作表已经存在也只运行代码并因此产生错误。使用 F8 浏览代码时,我可以看到名称应该相同。有什么建议么?
Dim S As Worksheet
Myvalue = activecell.Value
For Each S In ActiveWorkbook.Worksheets
If S.Name = Left(Myvalue & " Case Types", 31) Then GoTo Sheetalreadyexist
Next S
'Create New Sheet
Set ws = Sheets.Add(after:=Sheets(Worksheets.Count))
If Len(Myvalue & " Case Types") > 31 Then
ws.Name = Left(Myvalue & " Case Types", 31)
Else: ws.Name = Myvalue & " Case Types"
End If
Sheetalreadyexist: sheets(Left(Myvalue & " Case Types", 31).select
解决方案
我将使用以下函数来检查工作表是否存在
Public Function sheetExists(SheetName As String, Optional wrkBook As Workbook) As Boolean
If wrkBook Is Nothing Then
Set wrkBook = ActiveWorkbook 'or ThisWorkbook - whichever appropriate
End If
On Error GoTo EH
sheetExists = False ' Not really neccessary as this is the default
Dim sht As Object
For Each sht In wrkBook.Sheets
If UCase(sht.Name) = UCase(SheetName) Then
sheetExists = True
Exit For
End If
Next sht
Exit Function
EH:
sheetExists = False
End Function
然后你的代码看起来像这样
Sub OP_Code()
Dim S As Worksheet
Myvalue = ActiveCell.Value
If sheetExists(Left(Myvalue & " Case Types", 31)) Then
Sheets(Left(Myvalue & " Case Types", 31)).Select
Else
'Create New Sheet
Set ws = Sheets.Add(after:=Sheets(Worksheets.Count))
If Len(Myvalue & " Case Types") > 31 Then
ws.Name = Left(Myvalue & " Case Types", 31)
Else: ws.Name = Myvalue & " Case Types"
End If
End If
End Sub
推荐阅读
- swift - 如何从带有文本框的自定义单元格中获取 didselectrowat?
- php - 我想知道为什么不会生成 $Articles
- amazon-web-services - 使用 Lambda 将 S3 数据从一个 AWS 账户推送到另一个 S3 存储桶
- redux - Flutter redux:如何在注销时清除状态并在登录时重新初始化
- python - Python3:异步检测按键并将它们传达给主线程
- amazon-web-services - Dynamodb 一次批量扫描与多次单次获取
- c# - 我在 C# 中遇到了一个简单列表的问题(不显示实际列表)
- angular - 使用“ng generate”或“ng add”时出错
- jquery - 使用 jquery 将选择项从数据库传递到模态
- mysql - 如何更新特定列中的下一个日期