![](/img/trans.png)
[英]Reference a sheet name that doesn't yet exist but will be created from a variable in a cell. Excel VBA
[英]If sheet doesn't exist, create it (VBA 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
这可能是可以接受 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)解析为正确的名称。
我的回答的一些背景:
从本质上讲,您并不真正关心工作表是否存在,您只关心它是否存在。 创建具有特定工作表名称的工作表将产生错误并且不会创建新工作表(由于错误)。 因此,将创建包装在“下一个错误恢复”中将创建工作表,如果它不存在,并跳过错误,如果它已经存在。 下一行(在错误 goto 0 上)重新打开错误检查,以便您可以适当地处理代码中稍后可能发生的错误。
这可能是一个老问题,并且有很多好的和有效的答案(在互联网上)。 但我只是自己偶然发现了它,我发现没有直接满足我的编程风格的答案。 最后,我最终重新创建了一个 try...catch...finally 结构,我认为它看起来很干净。 因此,对于偶然发现这个问题并寻找通用且易于采用的解决方案的人:
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
这应该有效。 祝你好运。
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
我遇到了类似的问题并以这种方式解决了
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.