繁体   English   中英

Excel仅粘贴我的范围的一部分,其余部分出错。 我该如何解决?

[英]Excel is only pasting part of my range, and erroring out on the rest. How do I fix this?

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM