Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建文本文件时Excel VBA运行时错误5_Vba_Excel - Fatal编程技术网

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

创建文本文件时Excel VBA运行时错误5,vba,excel,Vba,Excel,我正在将大量数据(10万行)从excel导出到单独的文本文件中。每个文本文件应包含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 str

我正在将大量数据(10万行)从excel导出到单独的文本文件中。每个文本文件应包含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提供了一个简化的代码版本。

在循环中修改循环计数器不是一个好主意-它可能会导致难以跟踪的错误

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

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

你知道,我原以为这会奏效,但实际上它给了我同样的错误。在同一点上失败-2919行中。还有其他想法吗?@TwoHundredOK如果你接受了它,我假设你得到了这项工作?是的,请参阅原始帖子中的编辑1和2。注意,{dim I as Long}被添加。你应该使用{Option Explicit}module.erl值列在module.erl的顶部,显示为0Close,但不完全是0Close。文件名不是问题所在。应归咎于复制到文件中的单元格中翻译错误的UTF-8字符。