VBA - 运行时错误9:复制并粘贴

时间:2015-01-22 02:33:01

标签: excel vba excel-vba

我最近了解了vba。

我创建了一个包含某些字段的表单,这个字段的功能是

  1. SHEETNAME
  2. 范围复制
  3. 范围粘贴
  4. Private Sub CommandButton1_Click()
        Dim barisawal As String
        Dim sampaiawal As String
        Dim tujuanawal As String
        Dim tujuanakhir As String
    
    
        barisawal = bariske.Text
        barisakhir = TextBox2.Text
        tujuanawal = TextBox3.Text
        tujuanakhir = TextBox4.Text
        sheetawals = sheetawal.Text
        sheetakhirs = sheettujuan.Text
    
        Worksheets("sheetawals").Range("barisawal:barisakhir").Copy
        Worksheets("Sheetakhirs").Range("tujuanawal:tujuanakhir").Paste
    
    End Sub
    

    当我点击提交按钮CommandButton1时,我收到运行时错误#9"下标超出范围"。

    这是我想要做的:用户将在表单中填写工作表名称,范围和工作表目标以进行粘贴。

2 个答案:

答案 0 :(得分:3)

我尚未测试此代码,但您应该如何格式化stringsRange

Private Sub CommandButton1_Click()

Dim barisawal As String
Dim sampaiawal As String
Dim tujuanawal As String
Dim tujuanakhir As String
Dim strRangeCopy as string
Dim strRangePaste as string

barisawal = bariske.Text
barisakhir = TextBox2.Text
tujuanawal = TextBox3.Text
tujuanakhir = TextBox4.Text
sheetawals = sheetawal.Text
sheetakhirs = sheettujuan.Text

strRangeCopy = barisawal & ":" & barisakhir
strRangePaste = tujuanawal & ":" & tujuanakhir

Worksheets(sheetawals).Range(strRangeCopy).Copy
Worksheets(Sheetakhirs).Range(strRangePaste).PasteSpecial

End Sub

要使用worksheet(...).Range(...),您需要string代表您将使用的范围。通常将其格式设置为Range("A1")Range("A1:A4")

答案 1 :(得分:3)

下标超出范围错误发生在此行:

Worksheets("sheetawals").Range("barisawal:barisakhir").Copy

VBA将"sheetawals"理解为文字字符串,因此它正在尝试在活动工作簿中查找名为sheetawals的工作表。当它找不到它时,会因运行时错误9 /下标超出范围而爆炸。

作为@tospig correctly hinted,您的意思是使用您定义的变量,而不是字符串文字 - 如果活动工作簿中存在指定的工作表名称,则删除您将解决问题的双引号 / em>的。与Range相同 - 您需要使用字符串连接运算符&连接字符串,如下所示:

Worksheets(sheetawals).Range(barisawal & ":" & barisakhir).Copy

下一行代码相同。

现在,您需要添加一些错误处理,以防止在用户提供的值不合法时出现运行时错误。这是通过On Error语句完成的。将其作为过程中的第一个可执行代码行:

On Error GoTo ErrHandler

然后在End Sub之前添加如下内容:

    Exit Sub

ErrHandler:
    MsgBox "Invalid selection! Please try again."