分享

VBA插入工作表前判断是否存在

 leexingyuan5 2017-03-22

判断EXCEL 是否存在某工作表?


VBA插入工作表前判断是否存在


  在EXCEL2010的VBA代码窗口中,新建模块1并输入如下代码。

Sub插入前判断()
Dim x As Integer                         ‘设置循环变量
For x=1 To Sheets.Count                   ‘设置变量在“1”到“工作表数量”之间循环
    If Sheets(x).Name = ”Sheet4” Then      ‘判断工作表的名称是否为“Sheet4”
    MsgBox”已存在Sheet4工作表”
‘当“Sheet4”工作表存在时,运行该程序会弹出显示“已存在Sheet4工作表”
    Exit Sub                            ‘如果存在“Sheet4”工作表,则退出该过程
    End if
Next X
    Sheets.Add                          ‘如果不存在则插入工作表
Activesheet.Name = ” Sheet4”
‘ActiveSheet是指当前活动工作表,所以对当前活动工作表命名即可
End Sub

  运行该VBA代码,当“Sheet4”工作表存在时,该VBA程序会出显示“Sheet4”的信息提示框。在插入指定名称的工作表时,如果不进行判断(即取消上述代码中的For循环),则在插入名称相同的EXCEL2010工作表时也会弹出错误提示信息。

 

方案一:

Sub pd()
On Error Resume Next
 If Sheets("张三") Is Nothing Then
 MsgBox "工作表不存在"
 Else
 MsgBox "工作表存在"
 End If
End Sub

 

方案二:

Public Sub a()
Dim sht As Worksheet
For Each sht In Worksheets
    If sht.Name = "Sheet1" Then
        MsgBox "存在"
        Exit Sub
    End If
Next
MsgBox "不存在"
End Sub

 

方案三:

Public Sub a()
Dim sht As Worksheet
For Each sht In Worksheets
    If sht.Name = "Sheet1" Then
    j = j + 1
      End If
Next
If j = 1 Then
MsgBox "存在"
Else: MsgBox "不存在"
End If
End Sub

 


方案四:

Sub Lkup()
    Dim sh As Worksheet, k%
    k = 0
    For Each sh In Sheets
        If sh.Name = "AAA" Then MsgBox "此表存在!": k = k + 1: GoTo 1
    Next
1
    If k = 1 Then
        ……
    End If
End Sub


=============================================================================================

excel-vba应用示例之判断一个工作表(名)是否存在

 判断一个工作表(名)是否存在
[示例01]
Sub testWorksheetExists1()
  Dim ws As Worksheet
  If Not WorksheetExists(ThisWorkbook, "sheet1") Then
    MsgBox "不能够找到该工作表", vbOKOnly
    Exit Sub
  End If
  MsgBox "已经找到工作表"
  Set ws = ThisWorkbook.Worksheets("sheet1")
End Sub
'- - - - - - - - - - - - - - - - - - -
Function WorksheetExists(wb As Workbook, sName As String) As Boolean
  Dim s As String
  On Error GoTo ErrHandle
  s = wb.Worksheets(sName).Name
  WorksheetExists = True
  Exit Function
ErrHandle:
  WorksheetExists = False
End Function
示例说明:在测试代码中,用相应的工作簿名和工作表名分别代替“ThisWorkbook”和“Sheet1”,来判断指定工作表是否在工作簿中存在。

--------------------------------------------------------------------------------

[示例02]
Sub testWorksheetExists2()
  If Not SheetExists("<工作表名>") Then
    MsgBox "<工作表名> 不存在!"
  Else
    Sheets("<工作表名>").Activate
  End If
End Sub
'- - - - - - - - - - - - - - - - - - -
Function SheetExists(SheetName As String) As Boolean
  SheetExists = False
  On Error GoTo NoSuchSheet
  If Len(Sheets(SheetName).Name) > 0 Then
    SheetExists = True
    Exit Function
  End If
NoSuchSheet:
End Function
示例说明:在代码中,用实际工作表名代替<>。

--------------------------------------------------------------------------------

[示例03]
Sub TestingFunction()
 '如果工作表存在则返回True,否则为False
  '测试DoesWksExist1函数
  Debug.Print DoesWksExist1("Sheet1")
  Debug.Print DoesWksExist1("Sheet100")
  Debug.Print "-----"
  '测试DoesWks5Exist2函数
  Debug.Print DoesWksExist2("Sheet1")
  Debug.Print DoesWksExist2("Sheet100")
End Sub
‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Function DoesWksExist1(sWksName As String) As Boolean
  Dim i As Long
  For i = Worksheets.Count To 1 Step -1
    If Sheets(i).Name = sWksName Then
      Exit For
    End If
  Next
  If i = 0 Then
    DoesWksExist1 = False
  Else
    DoesWksExist1 = True
  End If
End Function
‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Function DoesWksExist2(sWksName As String) As Boolean
  Dim wkb As Worksheet
  On Error Resume Next
  Set wkb = Sheets(sWksName)
  On Error GoTo 0
  DoesWksExist2 = IIf(Not wkb Is Nothing, True, False)
End Function

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多