我将excel中的大量数据(100k行)导出到单独的文本文件中。每个文本文件应包含200行数据(只需从一列复制值)。它适用于前14个文件,然后在文件15的中途扼流圈。我得到:“运行时错误'5':无效的过程调用或参数”。它失败的行中的数据没有什么特别之处。
以下是代码:
Sub Create_Text_Files()
Dim row As Long, lastRow As Long, increment As Long, j As Long
Dim fso As Object
Dim strPath
Dim oFile As Object
increment = 199
j = 1
lastRow = Cells(Rows.Count, "A").End(xlUp).row
For row = 2 To lastRow
Set fso = CreateObject("Scripting.FileSystemObject")
strPath = "C:\data\" & Cells(row, "A").Value & j & ".txt"
Set oFile = fso.CreateTextFile(strPath)
For i = row To row + increment
oFile.WriteLine Cells(i, "F").Value
Next
oFile.Close
Set fso = Nothing
Set oFile = Nothing
row = i + 1
j = j + 1
Next
End Sub
非常感谢任何见解!
编辑:数据看起来很平常,但在删除行之后,脚本上的错误会持续一段时间再出现错误。似乎脚本在非标准字符上失败。
我想现在这使得这个问题变得与众不同了。是否有编码标记或类似的东西,我可以设置为平滑电子表格数据到.txt格式的转换?我想避免浏览所有100k记录并逐个删除非标准字符......
编辑2:原来只有大约十几行数据需要更改,所以我能够手工完成。我一直认为这是导致错误的原因,但感谢Tim提供了简化版的代码。
答案 0 :(得分:1)
我怀疑A2919包含一个禁止的文件名字符,例如/ \? %*:| “<>
答案 1 :(得分:0)
在循环中修改循环计数器并不是一个好主意 - 它可能导致难以跟踪的错误。
Sub Create_Text_Files()
Const ROWS_PER_FILE As Long = 200
Dim row As Long, lastRow As Long, j As Long, i As Long
Dim fso As Object, oFile As Object
Dim strPath
Set fso = CreateObject("Scripting.FileSystemObject")
lastRow = Cells(Rows.Count, "A").End(xlUp).row
i = 0
j = 1
For row = 2 To lastRow
If i Mod ROWS_PER_FILE = 0 Then
If Not oFile Is Nothing Then oFile.Close
strPath = "C:\data\" & Cells(row, "A").Value & j & ".txt"
Set oFile = fso.CreateTextFile(strPath)
j = j + 1
End If
oFile.WriteLine Cells(row, "F").Value
i = i + 1
Next
If Not oFile Is Nothing Then oFile.Close
End Sub