首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数据从一个工作簿复制到另一个工作簿时超出范围的错误

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

Stack Overflow用户
提问于 2015-01-19 23:28:10
回答 1查看 847关注 0票数 2

你好,我对VBA非常陌生,只是对Excel并不陌生,我正在尝试编写一个宏,允许用户选择一个文件,然后从该文件复制两个不同的数据范围,并将其粘贴到原始的活动工作簿中。

好的,在回顾了这些之后,我将代码更改为:

代码语言:javascript
运行
复制
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的新手。试图将数据从选定的文件复制到当前工作簿的宏出现问题。对于宏的斜体部分,我得到了超出范围的误差。任何帮助都是非常感谢的!

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

回答已采纳

发布于 2015-01-20 01:50:05

如果要复制整个列,则目标范围必须位于第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不是在任何地方定义的,其他三个变量都与同一个工作簿相关。

如果这样做:

代码语言:javascript
运行
复制
'Open Source WorkBook
Application.Workbooks.Open (strPath)

取而代之的是:

代码语言:javascript
运行
复制
'Open Source WorkBook
Dim sourceWB As Workbook
Set sourceWB = Application.Workbooks.Open(strPath)

很难理解Var1Var3的目的是什么。唯一明显的用法是存储此宏的工作簿,但您可能打开了其他在现有代码中未显式引用的工作簿。如果它们打算与存储在其中的宏与工作簿相关联,那么:

代码语言:javascript
运行
复制
'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
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28035305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档