【问题标题】:VBA - Run Time Error 9: Copy and pasteVBA - 运行时错误 9:复制和粘贴
【发布时间】:2015-01-22 02:33:00
【问题描述】:

我最近了解了 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“下标超出范围”。

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

【问题讨论】:

  • 第一件事是你的变量sheetawalssheetakhirsbarisawal等已经被定义为字符串,所以你不需要在它们周围加上引号(")。
  • 在我从 -> Worksheets(sheetawals).Range(barisawal:barisakhir).Copy 中删除“”后,错误发生了变化
  • 下一个问题是Range(...) 声明。给出的答案显示了如何解决这个问题。
  • 谢谢,现在我的脚本工作了。哦,是的,我将Worksheets(sheetakhirs).Range(strRangePaste).Paste 添加到`Worksheets(sheetakhirs).Range(strRangePaste).PasteSpecial`
  • 我也经常使用.PasteSpecial paste:=xlvalues

标签: vba excel


【解决方案1】:

此行发生下标超出范围错误:

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

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

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

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

下一行代码也一样。

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

On Error GoTo ErrHandler

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

    Exit Sub

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

【讨论】:

  • @Boby 感谢您的复选标记,别忘了也为 tospig 的回答点赞,他的 cmets 和回答很好而且很有用 - 您可以在 Stack Exchange / Stack Oveflow 上给予最好的“谢谢” ,仍然是一个赞成票:)
  • 我能再问一个问题吗? barisawal 和 tujuanawal 值来自输入表单。如何防止用户提交错误的值?例如,该表单应该是带有b3b4 的字段,如果用户只插入b
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 2017-12-16
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多