如果工作表不存在,请创建它(VBA Excel)

时间:2013-06-20 16:33:58

标签: vba excel-vba error-handling exists excel

我从Microsoft Access导入数据,错误检测似乎无法正常工作。如果代码尝试创建已存在的工作表,请继续并将目标工作表设置为已存在的工作表。任何提示都值得赞赏。

For ix = stWW To edWW
    For modi = 0 To mdcnt - 1

  On Error Resume Next
    Sheets.Add(After:=Sheets(Sheets.Count)).Name = ix & " " & modvar(modi)
  On Error GoTo 0

    Set DestinationSheet = Worksheets(ix & " " & modvar(modi))


     'strSQL2 = "SELECT 1302_Scan.* FROM 1302_Scan;"
     strSQL = "SELECT " & ix & "_" & modvar(modi) & ".* FROM " & ix & "_" & modvar(modi) & ";"

    'MsgBox strSQL & "|" & strSQL

    DestinationSheet.Cells.Clear
在代码中使用的

可能会导致@ sous2817的建议错误。

On Error GoTo continue
Do While Not IsNull(modvar(ii))
    mdcnt = mdcnt + 1
    ii = ii + 1

Loop
continue:
On Error GoTo 0

4 个答案:

答案 0 :(得分:4)

这可能是受控使用On Error Resume Next的时间。也许是这样的:

On Error Resume Next
Sheets.Add(After:=Sheets(Sheets.Count)).Name = ix & " " & modvar(modi)
On Error GoTo 0

这假设 ix& " " &安培; modvar(modi)解析为正确的名称。

我的回答有点背景:

核心是,如果工作表存在与否,你真的不在乎,你只关心它是否存在。创建具有特定工作表名称的工作表将生成错误,而不是创建新工作表(由于该错误)。因此,将创建包装在" on error resume next"如果表单不存在则会创建表单,如果表单已存在则跳过该错误。下一行(错误转到0)会重新启用错误检查,以便您可以适当地处理代码中稍后可能出现的错误。

答案 1 :(得分:0)

这可能是一个老问题,并且有很多好的和有效的答案(在互联网上)。 但我自己偶然发现了它并没有找到答案我发现直接满足了我的编程风格。 最后,我最终重新创建了一个尝试...抓住...最终结构,我觉得它看起来很干净。 因此,对于那些绊倒这个问题并寻找一个普遍且容易采用的解决方案的人来说:

    Dim sheetToCreate As Worksheet
    Dim sheetToCreateName As String: sheetToCreateName = "Name"

    On Error GoTo Catch
Try:
    Set sheetToCreate = wb.Worksheets(sheetToCreateName)
    GoTo Finally
Catch:
    Set sheetToCreate = wb.Worksheets.Add
    sheetToCreate.Name = sheetToCreateName 
Finally:
    On Error GoTo 0

答案 2 :(得分:0)

这应该有效。祝你好运。

Function Add_Sheet(sheet_name As String)
    Dim i, sheet_exists As Integer
    sheet_exists = 0
    For i = 1 To Sheets.Count
       If Sheets(i).Visible = -1 Then
           If Sheets(i).Name = sheet_name Then
                sheet_exists = 1
           End If
       End If
    Next
    If sheet_exists = 0 Then
        Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheet_name
    End If
End Function

答案 3 :(得分:0)

我遇到了类似的问题,并以这种方式解决了

    On Error GoTo Catch 
Try:
    Sheets("name_of_tab").Select 'Try to focus on the tab
    GoTo Finally
Catch:
    Sheets.Add(After:=Sheets(Sheets.Count)).Name = "name_of_tab" 'If it fails create it
Finally:
    On Error GoTo 0