Vba Excel只是粘贴了我范围的一部分,其余的都出错了。我该如何解决这个问题?

Vba Excel只是粘贴了我范围的一部分,其余的都出错了。我该如何解决这个问题?,vba,Vba,我正在构建一个宏,它允许用户选择一个文件夹,选择要导入的选项卡,然后打开文件夹中的每个文件,获取给定选项卡中的所有数据,并将其导入一个主工作表以便于查看 它以一种有趣的方式中断—当它将数据粘贴到行中时 DestinationWorkbook.Sheets("Data").Range("A" & LastrowOutput).Resize(DataRng.Rows.Count, DataRng.Columns.Count).Value = DataRng.Value 它在一些数据中发布,

我正在构建一个宏,它允许用户选择一个文件夹,选择要导入的选项卡,然后打开文件夹中的每个文件,获取给定选项卡中的所有数据,并将其导入一个主工作表以便于查看

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

DestinationWorkbook.Sheets("Data").Range("A" & LastrowOutput).Resize(DataRng.Rows.Count, DataRng.Columns.Count).Value = DataRng.Value
它在一些数据中发布,然后生成错误消息“运行时错误‘1004’:应用程序定义的或对象定义的错误”。具体来说,在我的第一个文件中,DD列有15311行。它在生成错误消息时导入14832行

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

此外,在调试和单步执行时,它从If语句直接跳到问题,同时生成问题和所有数据

在给定行的数据中没有任何异常

我达到技术极限了吗?有人知道发生了什么事吗?我的谷歌fu让我失望了

编辑:当使用选项卡中的数据再次运行代码时,我设法在收到“Automation error”错误消息之前进入第29663行。还在做那个专栏测试

编辑2:让它只选择有问题的列。仍然在同一行上断开

编辑3:分解代码以执行前10000行,然后执行所有剩余行。仍然在同一条线上中断。有人建议我查找隐藏的行和列-没有隐藏的行或列。接下来尝试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
Sub-PullingAllData()
Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
像细绳一样暗淡
将sFil设置为字符串
将FolderPath设置为字符串
“将文件夹设置为文件”对话框
将目标工作簿设置为工作簿
Dim DataRng As范围
将LastrowInput设置为双精度
将LastRow输出设置为双精度
'打开文件对话框
Set diaFolder=Application.FileDialog(msoFileDialogFolderPicker)
diaFolder.AllowMultiSelect=False
diaFolder.Show
FolderPath=diaFolder.SelectedItems(1)
'循环浏览选定文件夹中的电子表格
设置DestinationWorkbook=ActiveWorkbook
Dim ImportTabNumber为整数
ImportAttabNumber=InputBox(“请输入要导入的选项卡。*”,“帐户名”)
sPath=文件夹路径和文件的“\”位置
sFil=Dir(sPath&“*.xlsx”)'更改或添加格式
Do While sFil“”将启动循环,直到文件夹sPath中的所有文件都已循环通过
Set owbk=Workbooks.Open(sPath&“\”&sFil)”打开文件
如果owbk.Sheets.Count>=导入编号,则
设置InputTab=owbk.工作表(导入编号)
LastrowInput=inputAB.Range(“A”和Rows.Count).End(xlUp).Row
设置DataRng=InputAB.Range(“A1:DO”和LastrowInput).SpecialCells(xlCellTypeVisible)
LastrowOutput=DestinationWorkbook.Sheets(“数据”).Range(“A”和Rows.Count)。End(xlUp)。Row+1
DestinationWorkbook.Sheets(“数据”).Range(“A”和LastrowOutput)。调整大小(DataRng.Rows.Count、DataRng.Columns.Count)。Value=DataRng.Value
如果结束
owbk.Close为真
sFil=Dir
环
Application.Calculation=xlCalculationAutomatic
Application.ScreenUpdating=True
端接头
这篇文章(特别是靠近底部的Cees Timmerman的回答)可能会对这个问题有所启发。如果您有32位或64位版本的Excel,也值得检查。如果使用了前者,则可能内存不足

如果您有后者,请尝试创建一个
变量
数组来存储数据,然后再传输数据(
将MyData设置为变量:MyData=MyRange.Value

我还建议您打开任务管理器并检查“性能”选项卡。您应该能够使用资源监视器来跟踪使用了多少RAM。如果您有64位,RAM不太可能成为问题的根源,但看看幕后发生了什么(以及该操作的成本有多高)也无妨

在将代码投入生产之前,我强烈建议进行更多的测试(使用更多的文件)。如果这个密码已经被破解,将来很可能会再次破解。

这篇文章(特别是靠近底部的Cees Timmerman的答案)可能会对这个问题有所帮助。如果您有32位或64位版本的Excel,也值得检查。如果使用了前者,则可能内存不足

如果您有后者,请尝试创建一个
变量
数组来存储数据,然后再传输数据(
将MyData设置为变量:MyData=MyRange.Value

我还建议您打开任务管理器并检查“性能”选项卡。您应该能够使用资源监视器来跟踪使用了多少RAM。如果您有64位,RAM不太可能成为问题的根源,但看看幕后发生了什么(以及该操作的成本有多高)也无妨


在将代码投入生产之前,我强烈建议进行更多的测试(使用更多的文件)。如果该代码已经中断,将来很可能再次中断。

您不能使用行。请在多区域范围内计数以获取总行数:它将只返回第一个区域中的行数。因此,如果输入范围中存在隐藏行,代码将失败。您也无法仅使用
rng1.Value=rng2.Value
方法将多区域范围中的值分配到另一个范围。因此,我现在将其分为两部分-如果有10000多行,请给我前10k,然后是剩余的所有行数。仍然在同一条线上中断。Lastrowoutput因此给了我一个10002的值(正如预期的那样),有5311行和25列——所有的数字都是我期望和希望看到的。没有隐藏的行或列-检查是个好主意。所以我决定扔掉它一直在拉的当前文件,并尝试使用其余的文件。目前运行良好。导致问题的坏数据?难以识别