所以我正在编写一个excel VBA程序,它将具有特定名称的所有csv文件读入工作簿上的单独工作表中。
它正在读取文件而没有任何问题。当它将数据从文件转换到一个数组时会出现问题,该数组意味着包含目录所有文件中的所有相关数据。
要读取文件并按行分隔,
我正在使用:
Do Until EOF(1)
Line Input #1, LineFromFile
lineitems = Split(LineFromFile, Chr(10))
在模块的下方,当满足该数据行中的特定条件时,我将lineitems传递给数据数组。为清楚起见,表达式是将文件行中的日期值与文件名上的日期标记进行比较。
ElseIf (Left(lineitems(Line), 8) = Right(Left(FileTime(FileNum), 6), 2) + "/" + Right(Left(FileTime(FileNum), 4), 2) + "/" + Left(FileTime(FileNum), 2)) Then
Proxy = CStr(lineitems(Line))
DataArray(InverterNumber - 1, m(InverterNumber - 1)) = Proxy
正如您所看到的,我已经添加了一个代理步骤来尝试确保数据传播,但无济于事。我还添加了一个故障安全措施,以确保没有空行进入DataArray:
If Len(DataArray(InverterNumber - 1, m(InverterNumber - 1))) = Len(CStr(lineitems(Line))) Then
Test(InverterNumber - 1, m(InverterNumber - 1)) = Len(DataArray(InverterNumber - 1, m(InverterNumber - 1)))
m(InverterNumber - 1) = m(InverterNumber - 1) + 1
End If
现在,如果我在其发布模式中运行该程序,它将返回一系列空列,由于故障保护而不应该发生。 但是,当我通过调试模式运行它时,如果我观察到该步骤,它会正确地添加数据。
有什么方法可以确保正确翻译这些值吗?
有什么我可以做得更好吗?
答案 0 :(得分:1)
这会从您的文件中读取一行,但不会返回分隔该行的换行符:
Line Input #1, LineFromFile
然后这个:
lineitems = Split(LineFromFile, Chr(10))
你真的在"行"中有换行符吗?你的CSV文件?如果是,则有助于显示一些示例内容。