Excel VBA 运行时错误 9 subscrit 超出范围

Excel VBA 运行时错误 9 subscrit 超出范围

关闭工作簿时我收到:

Run-time error 9 subscript out of range

这是 VBA 代码:

Set wbk = Workbooks.Open(path & filename)
  wbk.Sheets(sheetname).Range("b6").Resize(row_count, col_count).Copy
  ThisWorkbook.Sheets(sheetname).Range("b6").Resize(1, col_count).PasteSpecial xlPasteValues
wbk.close

有人能帮助我摆脱这个错误吗?

答案1

这种错误表明你引用了一个不存在的细胞或者范围。就你的情况而言,我认为问题不在于关闭,而在于以下其中一行:

  wbk.Sheets(sheetname).Range("b6").Resize(row_count, col_count).Copy
  ThisWorkbook.Sheets(sheetname).Range("b6").Resize(1, col_count).PasteSpecial xlPasteValues

验证 sheetnamerow_count和是否col_count包含有效值。

答案2

为什么在粘贴中使用“.Resize”方法?我认为您试图复制 3x4 单元格的范围并将其粘贴到 1x4 单元格中。这是不可能的。尝试在不调整大小的情况下粘贴:

Set wbk = Workbooks.Open(path & filename)
  wbk.Sheets(sheetname).Range("b6").Resize(row_count, col_count).Copy
  ThisWorkbook.Sheets(sheetname).Range("b6").PasteSpecial xlPasteValues
wbk.close

我在其他帖子中看到一种将多个工作表中的数据复制到一个工作表中的方法:

Public Sub CopyMultipleData()
    Dim ws  As Worksheet, LR1 As Long, LR2 As Long
    Application.ScreenUpdating = False
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "Master" Then
            LR1 = Sheets("Master").Range("A" & Rows.Count).End(xlUp).row + 1
            LR2 = ws.Range("D" & Rows.Count).End(xlUp).row
            ws.Range("A1:J" & LR2).Copy Destination:=Sheets("Master").Range("A" & LR1)
        End If
    Next ws
    Application.ScreenUpdating = True
End Sub

相关内容