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

我最近了解了vba。

我已经做了一些forms的领域,这个领域的function是

  1. SHEETNAME
  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 

当我点击我的提交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这个代码,但这是你应该如何格式化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")