VBA – 运行时错误9:复制并粘贴
我最近了解了vba。
我已经做了一些forms的领域,这个领域的function是
- SHEETNAME
- 范围内复制
- 范围粘贴
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
当我点击我的提交buttonCommandButton1
,我得到一个运行时错误#9“下标超出范围”。
在这里,我想要做的:用户将填写工作表名称,范围和工作表的目的地粘贴。
一个下标超出范围的错误发生在这一行上:
Worksheets("sheetawals").Range("barisawal:barisakhir").Copy
VBA将"sheetawals"
理解为一个string,因此它试图在活动工作簿中查找名为sheetawals
的表。 当它没有find它时,运行时错误9 /下标超出范围。
正如@tospig正确暗示 ,你的意思是使用你定义的variables,而不是string文字 – 通过删除双引号,您将解决您的问题, 如果活动工作簿中存在指定的图表名称 。 Range
相同 – 您需要使用string连接运算符&
来连接string,如下所示:
Worksheets(sheetawals).Range(barisawal & ":" & barisakhir).Copy
下一行代码也一样。
现在,当用户提供的值不合法时,您需要添加一些error handling来防止运行时错误。 这是用On Error
语句完成的。 使你的程序中的第一个可执行的代码行:
On Error GoTo ErrHandler
然后在End Sub
之前添加如下内容:
Exit Sub ErrHandler: MsgBox "Invalid selection! Please try again."
我没有testing这个代码,但这是你应该如何格式化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")