VBA - 运行 时间错误 9:复制和粘贴
VBA - Run Time Error 9: Copy and paste
我最近了解到 vba。
我制作了一个包含一些字段的表单,这些字段的功能是
- 工作表名称
- 范围复制
- 范围粘贴
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"。
这是我想要做的:用户将在表单中填写工作表名称、范围和工作表目标以进行粘贴。
我还没有测试过这段代码,但这是你应该如何格式化 strings
和 Range
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."
我最近了解到 vba。
我制作了一个包含一些字段的表单,这些字段的功能是
- 工作表名称
- 范围复制
- 范围粘贴
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"。
这是我想要做的:用户将在表单中填写工作表名称、范围和工作表目标以进行粘贴。
我还没有测试过这段代码,但这是你应该如何格式化 strings
和 Range
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/下标超出范围而爆炸。
作为 Range
相同 - 您需要使用字符串连接运算符 &
连接字符串,如下所示:
Worksheets(sheetawals).Range(barisawal & ":" & barisakhir).Copy
下一行代码也一样。
现在,您需要添加一些错误处理以防止在用户提供的值不合法时出现运行时错误。这是通过 On Error
语句完成的。使它成为您过程中的第一行可执行代码:
On Error GoTo ErrHandler
然后就在 End Sub
之前,添加如下内容:
Exit Sub
ErrHandler:
MsgBox "Invalid selection! Please try again."