Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA/Sheets.Add.Name循环引发错误9_Vba_Excel - Fatal编程技术网

Excel VBA/Sheets.Add.Name循环引发错误9

Excel VBA/Sheets.Add.Name循环引发错误9,vba,excel,Vba,Excel,我是Excel VBA新手,并开始构建一个用于学习的时间跟踪工作簿。 其中一部分是For循环,该循环应为一年中的每个月添加一个命名工作表: Sub newyear() Dim month(12) As String Dim i As Integer month(1) = "Januar" month(2) = "Februar" ... month(12) = "Dezember" For i = 1 To 12 On Error Resume Next Sheets.Add(Tabell

我是Excel VBA新手,并开始构建一个用于学习的时间跟踪工作簿。 其中一部分是For循环,该循环应为一年中的每个月添加一个命名工作表:

Sub newyear()

Dim month(12) As String
Dim i As Integer

month(1) = "Januar"
month(2) = "Februar"
...
month(12) = "Dezember"

For i = 1 To 12
On Error Resume Next
Sheets.Add(Tabelle1).Name = month(i)
MsgBox Err.Number    <- this throws Error 9: "Subscript Out Of Range" after
                        every worksheet added during the loop
Next i

End Sub
Sub-newyear()
Dim月(12)作为字符串
作为整数的Dim i
月份(1)=“一月”
月(2)=“二月”
...
月(12)=“Dezember”
对于i=1到12
出错时继续下一步
表.添加(表1).名称=月份(i)

MsgBox错误号请参见下面的代码

Sub newyear()
On Error Resume Next
Dim month(12) As String
Dim i As Integer
month(1) = "January"
month(2) = "February"
month(3) = "March"
month(4) = "April"
month(5) = "May"
month(6) = "June"
month(7) = "July"
month(8) = "August"
month(9) = "September"
month(10) = "October"
month(11) = "November"
month(12) = "Dezember"
Dim ws As Worksheet
For i = 1 To 12
    With ThisWorkbook
        If Worksheets(month(i)).Name <> month(i) Then
            Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
            ws.Name = month(i)
        End If
    End With
    If Err.Description <> "" Then
        Err.Clear
        'do what you want to do 
    End If
Next i
End Sub
Sub-newyear()
出错时继续下一步
Dim月(12)作为字符串
作为整数的Dim i
月份(1)=“一月”
月份(2)=“二月”
月份(3)=“三月”
月份(4)=“四月”
月(5)=“5月”
月份(6)=“6月”
月份(7)=“7月”
月份(8)=“8月”
月份(9)=“9月”
月份(10)=“10月”
月份(11)=“11月”
月(12)=“Dezember”
将ws设置为工作表
对于i=1到12
使用此工作簿
如果是工作表(月份(i)),则命名月份(i)
设置ws=.Sheets.Add(之后:=.Sheets(.Sheets.Count))
ws.Name=月份(i)
如果结束
以
如果错误描述为“”,则
呃,明白了
“做你想做的事
如果结束
接下来我
端接头

请参阅下面的代码

Sub newyear()
On Error Resume Next
Dim month(12) As String
Dim i As Integer
month(1) = "January"
month(2) = "February"
month(3) = "March"
month(4) = "April"
month(5) = "May"
month(6) = "June"
month(7) = "July"
month(8) = "August"
month(9) = "September"
month(10) = "October"
month(11) = "November"
month(12) = "Dezember"
Dim ws As Worksheet
For i = 1 To 12
    With ThisWorkbook
        If Worksheets(month(i)).Name <> month(i) Then
            Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
            ws.Name = month(i)
        End If
    End With
    If Err.Description <> "" Then
        Err.Clear
        'do what you want to do 
    End If
Next i
End Sub
Sub-newyear()
出错时继续下一步
Dim月(12)作为字符串
作为整数的Dim i
月份(1)=“一月”
月份(2)=“二月”
月份(3)=“三月”
月份(4)=“四月”
月(5)=“5月”
月份(6)=“6月”
月份(7)=“7月”
月份(8)=“8月”
月份(9)=“9月”
月份(10)=“10月”
月份(11)=“11月”
月(12)=“Dezember”
将ws设置为工作表
对于i=1到12
使用此工作簿
如果是工作表(月份(i)),则命名月份(i)
设置ws=.Sheets.Add(之后:=.Sheets(.Sheets.Count))
ws.Name=月份(i)
如果结束
以
如果错误描述为“”,则
呃,明白了
“做你想做的事
如果结束
接下来我
端接头

我不知道为什么要避免出现错误。您可能可以为此编写冗长的代码,但它没有任何用处。您也可以尝试更短的:

Sub newyear()

   Dim month(12) As String
   Dim i As Integer

   month(1) = "January"
   month(2) = "February"
   month(3) = "March"
   month(4) = "April"
   month(5) = "May"
   month(6) = "June"
   month(7) = "July"
   month(8) = "August"
   month(9) = "September"
   month(10) = "October"
   month(11) = "November"
   month(12) = "Dezember"

   On Error Resume Next
   For i = 1 To 12
       If Worksheets(month(i)) Is Nothing Then
           Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = month(i)
       End If
   Next

End Sub

我不知道你为什么要避免出错。您可能可以为此编写冗长的代码,但它没有任何用处。您也可以尝试更短的:

Sub newyear()

   Dim month(12) As String
   Dim i As Integer

   month(1) = "January"
   month(2) = "February"
   month(3) = "March"
   month(4) = "April"
   month(5) = "May"
   month(6) = "June"
   month(7) = "July"
   month(8) = "August"
   month(9) = "September"
   month(10) = "October"
   month(11) = "November"
   month(12) = "Dezember"

   On Error Resume Next
   For i = 1 To 12
       If Worksheets(month(i)) Is Nothing Then
           Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = month(i)
       End If
   Next

End Sub

如果我的代码适合您,请将其标记为解决方案如果我的代码适合您,请将其标记为解决方案谢谢您的建议!遗憾的是,在代码错误9的“下一个i”之前添加“MsgBox=Err.Number”后,在每个添加的工作表之后仍然会出现以下错误:(.@Fr4gFr0g,我可以知道你为什么在下一次之前添加错误号吗i@Fr4gFr0g,编辑了上述答案。如果正确,请将其标记为解决方案。好的,因此最初我希望循环正常运行,即使已经存在了几个月的工作表。在这种情况下,循环会为每个现有的工作表添加一个未命名的工作表。这只是清除了错误。这仍然不能阻止它从一开始就发生。感谢您的建议!遗憾的是,在代码错误9的“下一个i”之前添加了“MsgBox=Err.Number”之后,在每个添加的工作表之后仍然会弹出:(.@Fr4gFr0g,我可以知道你为什么在下一次之前添加错误号吗i@Fr4gFr0g,编辑了上述答案。如果正确,请将其标记为解决方案。好的,因此最初我希望循环正常运行,即使已经存在了几个月的工作表。在这种情况下,循环会为每个现有的工作表添加一个未命名的工作表。这只是清除了错误但是,你知道,我认为当我的代码抛出错误时,显然我的代码错了,不是吗?我认为目标是编写干净的代码,天真的我认为干净的代码不应该产生错误。不管怎样,感谢您的输入:)。有时错误不是问题,而是功能:)在VBA中,就像在Excel中一样,你可以使用错误来为自己的利益服务。对于许多情况,这是一个很好的捷径。是的..这就是我得出的结论:为什么要尝试避免错误?!但是,你知道,我认为当我的代码抛出错误时,显然我的代码错了,不是吗?我认为目标是编写干净的代码,天真的我认为干净的code不应该生成错误。不管怎样,感谢您的输入:)。有时错误不是问题,而是一个功能:)在VBA中,就像在Excel中一样,您可以使用错误为您带来好处。对于许多情况来说,这是一条很好的捷径。