VBA Excel工作表复制顺序错误
早上好 我正在使用以下代码:VBA Excel工作表复制顺序错误,excel,vba,Excel,Vba,早上好 我正在使用以下代码: Sub CABsheet() Dim i As Long Dim xNumber As Long Dim xName As String Dim ws As Worksheet Application.ScreenUpdating = False Set ws = Sheets("CAB1") xNumber = Sheets("NIM & BADGER").Range("R27").Value For i = 1 To Numbe
Sub CABsheet()
Dim i As Long
Dim xNumber As Long
Dim xName As String
Dim ws As Worksheet
Application.ScreenUpdating = False
Set ws = Sheets("CAB1")
xNumber = Sheets("NIM & BADGER").Range("R27").Value
For i = 1 To Number
ws.Copy After:=ActiveWorkbook.Sheets(ws.Index + i - 1)
ActiveSheet.Name = "CAB" & i + 1
Next
ws.Activate
Application.ScreenUpdating = True
End Sub
但是我得到了一个错误,这个名字下的工作表已经存在了
当我使用像这样稍加修改的代码时:
Sub CABsheet()
Dim i As Long
Dim xNumber As Long
Dim xName As String
Dim ws As Worksheet
Application.ScreenUpdating = False
Set ws = Sheets("CAB1")
xNumber = Sheets("NIM & BADGER").Range("R27").Value
For i = 2 To Number
ws.Copy After:=ActiveWorkbook.Sheets(ws.Index + (i - 2))
ActiveSheet.Name = "CAB" & (i + 1) + 2
Next
ws.Activate
Application.ScreenUpdating = True
End Sub
然后一个错误消失了,一切似乎都很好,但是
。。。我从5号驾驶室开始计算,而不是2号驾驶室
如果我再修改一点代码
For i = 2 To xNumber
ws.Copy After:=ActiveWorkbook.Sheets(ws.Index + (i - 1))
ActiveSheet.Name = "CAB" & i + 2
Next
那么顺序是错误的
标签从CAB4开始
从2号出租车开始我需要它们。
我无法删除+2,因为调试器向我显示一个错误,即该名称已被使用
我可以在这段代码中修复什么?在您的第一个代码示例中
Dim xNumber As Long
您为它设置了一个值
xNumber = Sheets("NIM & BADGER").Range("R27").Value
然后在循环中使用变量Number
而不是xNumber
:
For i = 2 To Number
变量Number
未声明,也未使用值初始化,因此它是0
所以这是行不通的。确保使用选项Explicit
,以便在使用未声明的worng变量名时收到通知
我还建议不要使用
ActiveSheet
Option Explicit
Public Sub CABsheet()
Application.ScreenUpdating = False
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("CAB1")
Dim xNumber As Long
xNumber = ThisWorkbook.Worksheets("NIM & BADGER").Range("R27").Value
Dim i As Long
For i = 1 To xNumber
ws.Copy After:=ThisWorkbook.Sheets(ws.Index + i - 1)
ThisWorkbook.Sheets(ws.Index + i).Name = "CAB" & i + 1
Next
ws.Activate
Application.ScreenUpdating = True
End Sub
在运行代码之前:
运行代码后:
如果工作表已经存在,您还可以内置一个测试,并询问用户是否应该删除它:
Option Explicit
Public Sub CABsheet()
Application.ScreenUpdating = False
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("CAB1")
Dim xNumber As Long
xNumber = 10
Dim i As Long
For i = 1 To xNumber
ws.Copy After:=ThisWorkbook.Sheets(ws.Index + i - 1)
If WorksheetExists("CAB" & i + 1) Then
If MsgBox("Worksheet '" & "CAB" & i + 1 & "' already exists. Do you want to delete it?", vbExclamation + vbYesNo) = vbYes Then
Application.DisplayAlerts = False
ThisWorkbook.Sheets("CAB" & i + 1).Delete
Application.DisplayAlerts = True
ThisWorkbook.Sheets(ws.Index + i).Name = "CAB" & i + 1
End If
Else
ThisWorkbook.Sheets(ws.Index + i).Name = "CAB" & i + 1
End If
Next
ws.Activate
Application.ScreenUpdating = True
End Sub
Public Function WorksheetExists(ByVal WorksheetName As String, Optional ByVal InWorkbook As Workbook) As Boolean
If InWorkbook Is Nothing Then
Set InWorkbook = ThisWorkbook
End If
On Error Resume Next
Dim ws As Worksheet
Set ws = InWorkbook.Worksheets(WorksheetName)
On Error GoTo 0
WorksheetExists = Not ws Is Nothing
End Function
这不能解决我的问题。我在重写这段代码时犯了一个错误。这在我原来的一本书中是正确的。我认为问题可能出在循环范围内的某个地方,因为代码会拾取第一页,而这不应该发生。@MariuszKrukar再次检查我编辑的代码。我测试了它,它按预期工作。是的,我做了,同样:(调试器:ThisWorkbook.Sheets(ws.Index+I)。Name=“CAB”&I+1当你可能有一些名为
CAB2
的隐藏表时,请检查它。我用一个全新的工作簿进行了测试,它肯定有效。@MariuszKrukar你可以内置一个测试,以获得更好的可用性。请检查我编辑的答案。