Excel 2013 VBA:下标超出范围(错误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 

它给了我标题中expression的运行时错误“9”。 代码太简单了,我完全被难住了。 我周围的networking阅读,似乎是因为名称不存在,但无论是工作表和工作簿存在,具有相同的名称。 任何代码之间没有空间或怪异的字符。

基本上我想复制一个从B6到B15的列,从Source.xlsm中的“Sprint backlog”表到needChange.xlsm的Sheet1中的A14到A23范围

我试了一下,没有任何运气:

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

还修改了现在已经注释掉的代码。

我怀疑macros不能访问目标文件(needChange.xlsm),因为它无法find它或无法访问它,因此返回的问题,但我不知道如何解决它与代码..

如果有帮助的话,在运行macros的时候,这个代码中的两个工作簿都是开放的,对我来说是可以访问的。

我正转向你寻求帮助。

十分感谢。 最好的祝福。

这比预期的更棘手。 我从这个网页上大量借用了http://ccm.net/faq/24666-excel-vba-copy-data-to-another-workbook

我不得不添加引用到复制和粘贴工作表。

发布的代码需要打开两个工作簿,但是如果您为其指定path名,则可以打开wbTarget。 在这种情况下,您可以注释出现在-OR-之后的两行。

该代码还可以保存并closures目标工作簿。

 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 is good。

(在同一个代码行中,只有窗口的大小使它看起来像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