繁体   English   中英

Excel 2013 VBA:下标超出范围(错误9)

[英]Excel 2013 VBA: Subscript out of Range (Error 9)

所以我有这段代码:

Sub CopyItems()
    Dim Source As String
    Dim Target As String

    'Dim SourceSheet As String
    'Dim TargetSheet As String

    Source = "Source.xlsm"
    Target = "needChange.xlsm"

    'SourceSheet = "Sprint backlog"
    'TargetSheet = "Sheet1"

    Workbooks(Source).Sheets("Sprint backlog").Range("B6:B15").Copy
    Workbooks(Target).Sheets("Sheet1").Range("A14:A23").Paste '<-ERROR here
End Sub

如标题所示,它给了我运行时错误'9'。 代码是如此简单,以至于我完全陷入了困境。 我在网上阅读,似乎是因为不存在名称,但是工作表和工作簿都存在,并且名称相同。 任何代码之间都没有空格或奇怪的字符。

基本上我想从Source.xlsm中的“ Sprint backlog”工作表中复制一个从B6到B15的列到NeedChange.xlsm的Sheet1中的A14到A23

我试过了,没有任何运气:

Workbooks(Source).Sheets("Sprint backlog").Range("B6:B15").Copy _
Workbooks(Target).Sheets("Sheet1").Range("A14:A23").PasteSpecial

并使用现在已注释掉的内容修改了代码。

我怀疑宏无法访问目标文件(needChange.xlsm),因为它找不到或无法访问它,因此返回了问题,但是我不知道如何用代码修复它。

如果有帮助,则在运行宏时,此代码中的两个工作簿均已打开并且可供我使用。

我正在向您寻求帮助。

太谢谢了。 最好的祝福。

这比预期的要复杂。 我从此网页http://ccm.net/faq/24666-excel-vba-copy-data-to-another-workbook大量借用。

我必须添加对工作表的引用以进行复制和粘贴,以使其正常工作。

发布的代码要求打开两个工作簿,但是如果给它指定路径名,则可以打开wbTarget。 在这种情况下,您可以注释掉-OR-之后的两行。

该代码还可以保存和关闭目标工作簿。

Sub CopyOpenItems()
   '
   ' CopyOpenItems Macro
   ' Copy open items to sheet.
   '
   ' Keyboard Shortcut: Ctrl+Shift+O
   '
   Dim wbTarget            As Workbook 'workbook where the data is to be pasted
   Dim wbThis              As Workbook 'workbook from where the data is to copied
   Dim strName             As String   'name of the source sheet/ target workbook

   'set to the current active workbook (the source book)
   Set wbThis = ActiveWorkbook

   'get the active sheetname of the book
   strName = ActiveSheet.Name

   'open a workbook that has same name as the sheet name
   'Set wbTarget = Workbooks.Open("C:\YourPath\needChange.xlsm")

    ' - OR -
    Workbooks("needChange.xlsm").Activate
    Set wbTarget = ActiveWorkbook


   'select cell A1 on the target book
   'wbTarget.Range("A1").Select

   'clear existing values form target book
   'wbTarget.Range("A1:M51").ClearContents

   'activate the source book
   wbThis.Activate

   'clear any thing on clipboard to maximize available memory
   Application.CutCopyMode = False

   'copy the range from source book
   wbThis.Sheets("Sprint backlog").Range("B6:B15").Copy

   'paste the data on the target book
   wbTarget.Sheets("Sheet1").Range("A14").PasteSpecial

   'clear any thing on clipboard to maximize available memory
   Application.CutCopyMode = False

   'save the target book
   'wbTarget.Save

   'close the workbook
   'wbTarget.Close

   'activate the source book again
   wbThis.Activate

   'clear memory
   Set wbTarget = Nothing
   Set wbThis = Nothing

End Sub

如果只复制值(不复制公式,图片,格式),则简单

Workbooks(Target).Sheets("Sheet1").Range("A14:A23").value = Workbooks(Source).Sheets("Sprint backlog").Range("B6:B15").value是好的。

(在同一条代码行中,仅此处的窗口大小使其看起来像2)。

超越价值:

Workbooks(Source).Sheets("Sprint backlog").Range("B6:B15").Copy _ Workbooks(Target).Sheets("Sheet1").Range("A14:A23")

(2行)

注意_表示以下行应位于同一行,并且仅在此处用于更轻松地阅读代码。 (您在第二个代码中犯了该错误)

注意2range().paste不存在,只有sheets().pasterange().pastespecial

注意3 :当然,所有工作簿和工作表都必须存在,并且具有与使用的确切名称相同的名称...

注意4 :仅当两个工作簿都已打开时,复制/粘贴才有效。 对于已关闭的文件,情况则不同。

简而言之,您犯了两个错误: _range().paste

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM