检查表格是否存在

时间:2016-01-25 15:16:07

标签: excel excel-vba vba

有人可以告诉我这里出错的地方吗?我想检查名为" test"存在,如果不存在,则创建该表并将其命名为" test"。如果它存在,我运行一个单独的代码块,我还没有把它放在这里。我使用了错误处理,因为它忽略了它发生的错误。

If Sheets("test").Name = "" Then  
'MsgBox Sheets("test").Name & "Name"  
.Worksheets.Add         After:=ThisWorkbook.Worksheets("test2")  
.ActiveSheet.Name = "test"  
End If  

无论我做什么,代码的这一部分总是运行并创建一个新工作表。如果工作表"测试"已经不存在了。它会创建一个新工作表并重命名并继续。显然,在另一种情况下,它不会重新命名工作表,因为已经有另一张工作表" test"同名。

谢谢!

4 个答案:

答案 0 :(得分:1)

如果您对VBA不太熟悉,可以使用它而不是函数:

var channels = ["a","b","c"],
    calls = channels.reduce( function (arr, current) {
        var xhr = $.get("http://example.com?q=" + current, function() { /* your code ajax success*/}); 
        arr.push(xhr);
        return arr;
    }, []);

//Take that array and apply it to the when
$.when.apply($, calls).done( function () {
   //Your code
} )

答案 1 :(得分:0)

实现此目的的一种略微不同的方法是创建工作表名称的字典。

然后,您可以使用exists函数来测试工作表是否存在

Dim sheetNames As Object
Dim ws As Worksheet

' Create and populate dictionary
Set sheetNames = CreateObject("Scripting.Dictionary")
For Each ws In ThisWorkbook.Sheets
    sheetNames.Add ws.Name, ws.Index
Next ws

' Test if sheet exists
If Not sheetNames.Exists("test") Then
    ' If not add to workbook
    ThisWorkbook.Worksheets.Add(after:=ThisWorkbook.Worksheets("test2")).Name = "test"
    ' add sheet to dictionary
    sheetNames.Add "test", ThisWorkbook.Worksheets("test").Index
End If

答案 2 :(得分:0)

不太确定为什么要添加其他工作表,但我会使用外部函数来检查工作表是否存在...

我还会为“test2”添加一些错误检查,所以这里有一些你应该能够适应的代码

Sub Test()
    Dim wsName As String: wsName = "test"
    If Not WorkSheetExists(wsName) Then Worksheets.Add().Name = wsName
    If WorkSheetExists("test2") Then Worksheets(wsName).Move _
        After:=ThisWorkbook.Worksheets("test2")
End Sub

Function WorkSheetExists(ByVal strName As String) As Boolean
   On Error Resume Next
   WorkSheetExists = Not ActiveWorkbook.Worksheets(strName) Is Nothing
End Function

答案 3 :(得分:-1)

试试这个:

Function IsExists(name As String, Optional wb As Workbook) As Boolean
    Dim sheet As Worksheet

     If wb Is Nothing Then Set wb = ThisWorkbook
     On Error Resume Next
     Set sht = wb.Sheets(name)
     On Error GoTo 0
     IsExists = Not sheet Is Nothing
 End Function