vba - 将数据从一个工作簿复制到另一个工作簿时出现超出范围错误

标签 vba excel copy

大家好,我对 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

我现在唯一的问题是我认为由于 2014 年 12 月 9 日的 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
不清楚是什么Var1 , Var2Var3是因为它们都以同一个工作簿的名称结尾。虽然每个都分配了 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

关于vba - 将数据从一个工作簿复制到另一个工作簿时出现超出范围错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28035305/

相关文章:

php - 从 div 到 textarea 的内容

java - 修补新版本的maven Artifact jar

vba - 如何在代码中 Access 控件的标签

excel - Vba - 使用 ng-click 进行网页抓取

vba - 将多个文件发送到多个地址的宏

python - 字典解析Python

vba - Excel-VBA : Adding a button clears the clipboard - workaround needed

java - 使用 Apache POI 向 Excel 添加列

excel - 在 golang 中,如何在 xlsx 的单元格内输出换行符

c# - 从网络复制整个共享目录