簡體   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