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

VBA - Run Time Error 9: Copy and paste

我最近了解到 vba。

我制作了一个包含一些字段的表单,这些字段的功能是

  1. 工作表名称
  2. 范围复制
  3. 范围粘贴
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 "Subscript out of range"。

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

我还没有测试过这段代码,但这是你应该如何格式化 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")

格式

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

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

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

作为 ,您的意思是使用您定义的变量,而不是字符串文字 - 通过删除双引号,您将解决问题 如果指定的 sheet 名称存在于活动工作簿中Range 相同 - 您需要使用字符串连接运算符 & 连接字符串,如下所示:

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

下一行代码也一样。

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

On Error GoTo ErrHandler

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

    Exit Sub

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