
[英]Copy pasting using Range.Value in VBA formats my text as date. How can I fix this?
[英]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.