2014-01-08 111 views
1

我有2个值sheet1我想迁移到sheet2。截至目前,我的CommandButton正常工作,直到我创建一个报表。但只要我选择我的报表它给了我一个下标超出范围错误。在评论我的最后一行代码时,程序运行良好。VBA下标超出范围选择

Private Sub CommandButton1_Click() 

Dim CustomerName As String, CustomerProblem As Integer, newSheet As Worksheet, newName As String 


Do 
    newName = Application.InputBox("What do you want to name the new sheet?", Type:=2) 
    If newName = "False" Then Exit Sub: Rem cancel pressed 

    Set newSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(1)) 

    On Error Resume Next 
     newSheet.Name = newName 
     newName = Error 
    On Error GoTo 0 

    If newName <> vbNullString Then 
     Application.DisplayAlerts = False 
     newSheet.Delete 
     Application.DisplayAlerts = True 
     MsgBox newName 
    End If 
Loop Until newName = vbNullString 

Worksheets("sheet1").Select 
CustomerName = Range("C4") 
CustomerProblem = Range("C5") 

这条线给我错误。

Worksheets("newName").Select 

回答

0

引号内的任何内容都将被视为字符串而不是变量。更改

Worksheets("newName").Select 

Worksheets(newName).Select 

而且几乎没有任何需要使用.Select/.Activate。您可能希望看到THIS

从评论

跟进这是你想什么呢?

Private Sub CommandButton1_Click() 
    Dim CustomerName As String 
    Dim CustomerProblem As Integer 
    Dim newSheet As Worksheet 
    Dim newName As Variant 

    Do 
     newName = InputBox("What do you want to name the new sheet?", _ 
          "Please enter a sheet name") 
     If newName = False Or Len(Trim(newName)) = 0 Then Exit Sub 

     Application.DisplayAlerts = False 
     On Error Resume Next 
     ThisWorkbook.Sheets(newName).Delete 
     On Error GoTo 0 
     Application.DisplayAlerts = True 

     Set newSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(1)) 

     newSheet.Name = newName 

     newSheet.Activate 
    Loop 
End Sub 
+0

上删除引号我仍然得到了同样的错误:/ – user2735206

+0

在这种情况下,检查什么是'newName'的价值?它不能为空,也不能包含不需要的空格。它必须包含与工作表相同的确切名称。如果你看一下上面的代码,请参考 –

+0

。我将该工作表的名称作为用户的输入。 newSheet.Name = newName – user2735206