2014-02-22 264 views
0

我正在将大量数据(100k行)从excel导出到单独的文本文件中。每个文本文件应包含200行数据(仅从一列复制值)。它适用于前14个文件,然后通过文件15中途扼流圈。我得到:“运行时错误'5':无效的过程调用或参数”。对于失败的行中的数据没有什么特别之处。创建文本文件时Excel VBA运行时错误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

**在哪一行?? ** –

+0

erl值被列为0 – TwoHundredOK

回答

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 
+0

你知道吗,我认为这可以工作,但实际上给了我同样的错误。如果你有任何其他的想法? – TwoHundredOK

+0

@TwoHundredOK我认为你已经接受了它的工作? – brettdj

+0

是的,请参阅原文中的编辑1和2 – TwoHundredOK

1

我怀疑A2919包含禁止的文件名字符,如/ \? %*:| “<>

+1

关闭但不完全,文件名不是问题,错误地翻译了正在被复制到文件中的单元格中的UTF-8字符是怪罪。 – TwoHundredOK