我正在建立一个宏,使用户可以选择一个文件夹,选择要导入的选项卡,然后打开该文件夹中的每个文件,获取给定选项卡中的所有数据,然后将其导入到一个主表中以便于查看。

它以一种有趣的方式中断-在将数据粘贴到行中时

DestinationWorkbook.Sheets("Data").Range("A" & LastrowOutput).Resize(DataRng.Rows.Count, DataRng.Columns.Count).Value = DataRng.Value

它正在发布一些数据,然后生成错误消息“运行时错误'1004':应用程序定义的错误或对象定义的错误”。具体来说,在我的第一个文件中,我有15311行(按DD列)。 当它生成错误消息时,它将导入14832行。

(将使用更少的列进行测试)

此外,在调试和逐步调试时,它在生成问题和所有数据时从If语句直接跳转到问题。

给定行中的数据没有异常。

我是否达到技术极限? 有人知道发生了什么吗? 我的谷歌福使我失败。

编辑:当再次使用选项卡中的数据运行代码时,我设法到达29663行,然后收到“自动化错误”错误消息。 仍在进行该列测试...

编辑2:仅选择有问题的列即可。 仍在同一行上中断。

编辑3:分解代码以执行前10,000行,然后执行所有其余行。 仍然在同一条线上中断。 建议我寻找隐藏的行和列-没有隐藏的行或列。 接下来要尝试value2和value3。

Sub PullingAllData()


Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Dim sPath As String
Dim sFil As String
Dim FolderPath As String
   Dim diaFolder As FileDialog
   Dim DestinationWorkbook As Workbook
   Dim DataRng As Range
   Dim LastrowInput As Double
   Dim LastrowOutput As Double


    'Open the file dialog
  Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
    diaFolder.AllowMultiSelect = False
    diaFolder.Show
    FolderPath = diaFolder.SelectedItems(1)

     ' Cycle through spreadsheets in selected folder




    Set DestinationWorkbook = ActiveWorkbook

     Dim ImportTabNumber As Integer
ImportTabNumber = InputBox("Please Enter the tab to import.*", "Account Name")


sPath = FolderPath & "\" 'location of files

sFil = Dir(sPath & "*.xlsx") 'change or add formats
Do While sFil <> "" 'will start LOOP until all files in folder sPath have been looped            through


Set owbk = Workbooks.Open(sPath & "\" & sFil) 'opens the file

If owbk.Sheets.Count >= ImportTabNumber Then

        Set InputTab = owbk.Sheets(ImportTabNumber)
        LastrowInput = InputTab.Range("A" & Rows.Count).End(xlUp).Row
        Set DataRng = InputTab.Range("A1:DO" & LastrowInput).SpecialCells(xlCellTypeVisible)


  LastrowOutput = DestinationWorkbook.Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row + 1
  DestinationWorkbook.Sheets("Data").Range("A" & LastrowOutput).Resize(DataRng.Rows.Count, DataRng.Columns.Count).Value = DataRng.Value

End If



owbk.Close True
sFil = Dir

Loop

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

#1楼 票数:2

这篇文章(特别是Cees Timmerman在底部附近的回答)可能使您对该问题有所了解。 还值得检查您是否具有32位或64位版本的Excel。 如果您拥有前者,则可能是内存不足。

如果有后者,请尝试在创建数据之前创建一个Variant数组来存储数据( Dim MyData as Variant : MyData = MyRange.Value )。

我还建议打开您的任务管理器并检查性能选项卡。 您应该能够使用资源监视器来跟踪正在使用多少RAM。 如果您确实有64位,则RAM不太可能成为问题的根源,但是查看幕后发生的事情(以及该操作的成本可能很高)并不会造成损害。

在将代码投入生产之前,我强烈建议您进行更多测试(包含更多文件)。 如果该代码已被破坏,将来很有可能会再次破坏。

  ask by Selkie translate from so

未解决问题?本站智能推荐:

3回复

如何将VBA数组的一部分粘贴到excel范围

是否有可能将 vba 数组的一部分传递到 excel 范围? 我需要做这样的事情: 但这不起作用......有没有办法解决这个问题? 谢谢!
1回复

如何选择范围的一部分

要在AP列中分配xx,我必须检查一些字段,在xx分配之前必须填写它们 我试图将一些列分配给一个变量,但我对该变量进行了控制,但似乎不起作用 我在这条线上有一个错误 这是我的代码:
1回复

将Excel工作簿的一部分复制/粘贴到当前未打开的工作簿

我需要将Excel工作簿的一部分复制到~3500其他工作簿。 由于工作簿的数量,在每个工作簿上运行宏是不可行的。 有没有办法复制该片段并将其粘贴到其他工作簿而不打开它们?
1回复

IF公式作为VBA复制和粘贴的一部分

VBA 非常新(这是第 2 天)。 到目前为止,我的大部分经验是来自网络上的代码的混合以及对这里上一个问题的巨大帮助。 所以我有一个新问题。 我正在将大量 Excel 工作表中的数据导入到一个合并工作表中作为记录。 该位工作正常,然后以适合用户的格式复制到单独的工作表上。 但是,我想要一个公式,我
1回复

如何在VBA(Excel)中使用给定范围的一部分,即范围内的某些行

我有一个范围引用Excel中的表。 我需要创建一个图形,并因此使用我的表范围设置源数据。 我希望源数据是表的第一行和最后两行(标题和总共2行)。 假定范围是使用变量形成的,则有一种方法可以选择任何给定范围的那些部分(假设范围由三行或更多行组成)。 到目前为止,这是我的代码:
2回复

使用VBA仅引用Excel表数据主体范围的一部分

我找到了引用表中的整行/列或单个单元格的解决方案(例如 The VBA Guide To ListObject Excel Tables ),但不是特定范围。 示例:Table1 的 DataBodyRange 是 3 列和 10 行,我需要在每列中绘制第 4-10 行的数据(以编程方式,因为表格是
1回复

是否可以在Excel中将变量用作范围的一部分?

我基本上想用公式填充H列第8行及以后的所有使用的单元格。 我已计算出最后一行的编号,并尝试应用如下值: 但没有运气。 有没有办法使这项工作有效,如果可以,正确的语法是什么?
1回复

如何在VBA表单上显示Excel的一部分

我有一个.csv格式的文件,并且来自AS列,它有一些记录,例如表格。 我完整的程序将插入/删除/删除/添加一些行,列和编辑单元格值等。我设法编写了我需要的所有操作,现在我正尝试将其与gui集成。 我想要的是显示从Ax1到VBA用户窗体上已记录的最后一列的单元格。 我怎样才能做到这一点?