我最近了解了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"下标超出范围"。
这是我想要做的:用户将在表单中填写工作表名称,范围和工作表目标以进行粘贴。
答案 0 :(得分:3)
我尚未测试此代码,但您应该如何格式化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")
答案 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."