创建文本文件时Excel VBA运行时错误5

时间:2014-02-22 23:41:58

标签: excel vba excel-vba

我将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提供了简化版的代码。

2 个答案:

答案 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