簡體   English   中英

超出范圍錯誤將數據從一個工作簿復制到另一個工作簿

[英]Out of Range error copying data from one workbook to another

大家好,我對VBA非常陌生,對Excel來說還不算老,我正在嘗試編寫一個宏,該宏將允許用戶選擇一個文件,然后從該文件復制2個單獨的數據范圍並將其粘貼到原始活動工作簿。

好的,所以在檢查了此內容之后,我將代碼更改為:

Sub GetFastScanData()

'Add file name to Active Sheet
Dim intChoice As Integer
Dim strPath As String 

Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
intChoice = Application.FileDialog(msoFileDialogOpen).Show

If intChoice <> 0 Then
  strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
  Cells(1, 1) = strPath

  'Open Source WorkBook
  Dim sourceWB As Workbook
  Set sourceWB = Application.Workbooks.Open(strPath)

  'Give names to items
  Dim Var1 As String
  Var1 = "BT16"

  Dim Var2 As Integer
  Var2 = 1

  Dim Var3 As String
  Var3 = "BU16"

  'Copy from Source to Target
  sourceWB.Sheets(Var2).Range("F1:F55000").Copy _
    Destination:=Workbooks.Sheets("PI-2 data").Range(Var1)

  sourceWB.Sheets(Var2).Range("I2:I55000").Copy _
    Destination:=Workbooks.Sheets("PI-2 data").Range(Var3)

  'Close Source WorkBook wo/Save
  sourceWB.Close False

End If

End Sub

我現在唯一的問題是,我認為由於12/9/2014 Windows更新而出現錯誤? 編譯錯誤:找不到數據


原始帖子:

我真的是VBA的新手,但我絕對不是Excel的新秀。 我在嘗試將數據從選定文件復制到當前工作簿的宏中遇到問題。 我遇到宏的斜體部分超出范圍的錯誤。 任何幫助是極大的贊賞!

Sub GetFastScanData()

    'Add file name to Active Sheet
    Dim intChoice As Integer
    Dim strPath As String
    Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
    intChoice = Application.FileDialog(msoFileDialogOpen).Show
    If intChoice <> 0 Then
    strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
    Cells(1, 65) = strPath

    'Open Source WorkBook
    Application.Workbooks.Open (strPath)

    'Give names to workbooks and items
    Dim Var1 As String, Var1R As String
    Var1 = ActiveWorkbook.Name
    Var1R = "BT16"

    Dim Var2 As String, Var2R As String
    Var2 = ActiveWorkbook.Name
    Var2R = 1

    Dim Var3 As String, Var3R As String
    Var3 = ActiveWorkbook.Name
    Var3R = "BU16"

    'Copy from Source to Target
    *sourceWB.Sheets(Var2R).Columns(6).EntireColumn.Copy _
    Destination:=Workbooks(Var1).Sheets("PI-2 data").Range(VarR1)*

    Sheets(Var2R).Columns(9).EntireColumn.Copy _
    Destination:=Workbooks(Var3).Sheets("PI-2 data").Range(Var3R)

    'Close Source WorkBook wo/Save
    Workbooks(Var2).Close False

    End If

End Sub

如果要復制整列,則目標范圍必須在第1行中。否則,沒有足夠的行來容納您要粘貼的值(請記住,這將復制每行中的條目-全部1,048,576,而不僅僅是您實際使用的)。 如果只希望復制部分列,則不要使用.EntireColumn

尚不清楚Var1Var2Var3分別代表什么,因為它們都以同一工作簿的名稱結尾。 雖然為每個工作簿分配了ActiveWorkbook.Name的值,但是在每次分配之間都不會更改活動工作簿,因此它們都將獲得相同的值

編輯:替換.Columns(6).EntireColumn.Copy.Range("F2:F55000").Copy和替換.Columns(9).EntireColumn.Copy.Range("I2:I55000").Copy 還有其他更好的方法可以做到這一點,但這是最容易理解的。

您仍然需要准確確定要復制內容的工作簿。 sourceWB沒有在任何地方定義,其他三個變量都與同一工作簿相關。

應該這樣:

'Open Source WorkBook
Application.Workbooks.Open (strPath)

而是這樣:

'Open Source WorkBook
Dim sourceWB As Workbook
Set sourceWB = Application.Workbooks.Open(strPath)

很難解釋Var1Var3的含義。 唯一明顯的用法是用於存儲該宏的工作簿,但您可能會打開其他未在現有代碼中明確引用的工作簿。 如果它們旨在與其中存儲有宏的工作簿相關,則:

'Give names to items
Dim Var1R As String
Var1R = "BT16"

Dim Var2R As Integer
Var2R = 1

Dim Var3R As String
Var3R = "BU16"

'Copy from Source to Target
sourceWB.Sheets(Var2R).Range("F2:F55000").Copy _
Destination:=ThisWorkbook.Sheets("PI-2 data").Range(VarR1)

sourceWB.Sheets(Var2R).Range("I2:I55000").Copy _
Destination:=ThisWorkbook.Sheets("PI-2 data").Range(Var3R)

'Close Source WorkBook wo/Save
sourceWB.Close False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM