我想知道如果存在工作簿中的工作表,是否存在返回True或False的清除功能?
如果可以在不跳过错误处理的情况下完成它,那将是好的,但不是必需的.
我发现的唯一的东西并不真正起作用:
On Error Resume Next
If (Worksheets("wsName").Name <> "") Then
Debug.Print "Worksheet exists!"
Else
Debug.Print "Worksheet doesn't exist!"
End If
On Error GoTo ErrHandler
Run Code Online (Sandbox Code Playgroud) 这是我用来尝试将新工作表添加到工作簿中的最后一个位置的VBA代码
mainWB.Sheets.Add(After:=Sheets(Sheets.Count)).Name = new_sheet_name
Run Code Online (Sandbox Code Playgroud)
我在这个网站上看到了类似的问题.它不起作用.
我在一个循环中执行此操作,并将每个工作表添加到工作表中的第二个位置.永久存在2张纸(信息和摘要),然后我先添加5个称为"test"1到5的纸张.我总是以这个顺序结束纸张:
Info, sheet5, sheet4, sheet3, sheet2, sheet1, Summary
Run Code Online (Sandbox Code Playgroud)
但我想要/期待的是:
Info, Summary, sheet1, sheet2, sheet3, sheet4, sheet5
Run Code Online (Sandbox Code Playgroud)
(循环确实以预期的顺序生成它们,所以问题不在那里.)
如果我在开始之前交换摘要和信息表,那么当我完成时它们就在相反的位置.
我究竟做错了什么?
有谁知道如何使用Excel VBA检查Excel文档中是否存在某些工作表?
我的代码中有不同的集合.有些持有对象(各种类型),其他有类型(如Long).
有没有办法检查Collection中是否包含适用于类型和对象的键?
到目前为止,我有两个功能.
第一个功能:
Private Function ContainsObject(objCollection As Object, strName As String) As Boolean
Dim o As Object
On Error Resume Next
Set o = objCollection(strName)
ContainsObject = (Err.Number = 0)
Err.Clear
End Function
Run Code Online (Sandbox Code Playgroud)
第二功能:
Private Function ContainsLong(AllItems As Collection, TheKey As String) As Boolean
Dim TheValue As Long
On Error Resume Next
TheValue = AllItems.Item(TheKey)
ContainsLong = (Err.Number = 0)
Err.Clear
End Function
Run Code Online (Sandbox Code Playgroud)
这两个函数的原因是如果我传递一个具有Longs对的Collection(函数总是返回False),ContainsObject似乎不起作用.
我有一个功能,我想从各种模块调用.什么是在VB(excel)中执行此操作的最佳方法.
模块"SheetExists"
Function Name(SheetName As String) As Boolean
' returns TRUE if the sheet exists in the active workbook
SheetExists = False
On Error GoTo NoSuchSheet
If Len(Sheets(SheetName).Name) > 0 Then
SheetExists = True
Exit Function
End If
NoSuchSheet:
End Function
Run Code Online (Sandbox Code Playgroud)
模块"主"
If Not SheetExists.Name("mySheet") Then
'do this
Else
' else do this
End If
Run Code Online (Sandbox Code Playgroud)
我不希望有这样做还是我?
Call SheetExists.Name("mySheet")
Run Code Online (Sandbox Code Playgroud)
这是从另一个模块调用函数的唯一方法吗?我是否必须将其声明为Public函数或其他内容?
我已经测试了许多代码来检查工作表是否存在(基于名称),如果不存在则创建一个。其中一些循环所有工作表,有些引用工作表,如果创建错误意味着该工作表不存在。哪个是最合适 - 正统 - 更快的方式来完成这项任务?
目前我正在使用:
Option Explicit
Sub test()
Dim ws As Worksheet
Dim SheetName As String
Dim SheetExists As Boolean
SheetName = "Test"
SheetExists = False
With ThisWorkbook
'Check if the Sheet exists
For Each ws In .Worksheets
If ws.Name = SheetName Then
SheetExists = True
Exit For
End If
Next
If SheetExists = False Then
'If the sheet dont exists, create
.Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = SheetName
End If
End With
End Sub
Run Code Online (Sandbox Code Playgroud)