有没有一种方法可以使用不同于VBA默认的分隔符(vbCr / vbCrLf)来一次读取一行文件?
我正在尝试读取多行.csv文件,并将每个令牌放置在Excel中的自己的单元格内。 问题是我无法控制传入的.csv文件。
它们在列数方面都是一样的(尽pipe可变的行数,但这很容易解释)。 但是,无论出于什么原因,.csv文件的源代码有时会在标题行末尾放置一个CRLF
, 有时它只放一个LF
。 再次,我无法控制这一点,所以我必须围绕变化编码。
据我所知,VBA线路Line Input #1, strLine
使用CR
或CRLF
来划定线路,这是有道理的。 我试图把整个.csv文件的内容放到一个单独的string中,然后使用Replace strFileContents, vbCr, ""
来消除所有的CR
字符,但是好像这样也消除了后来出现的所有CRLF
,我在哪里开始
那么,有没有办法让我一次接受一行,使用Line Input #1, strLine
而不是LF
分隔符? 或者还有另一种方法,我可以操纵一个string的全部内容(即摆脱只有CR
而不是CRLF
的实例),并从那里Split()
string?
这里是我的代码的缩写版本:
Dim Column, Row As Integer 'used Sheets().Input(Row, Column).Value to insert strings Open strFilePath For Input Access Read As #1 Do Until EOF(1) Line Input #1, strLine strLine = Split(strLine, vbLf)(1) arr = Split(strLine, ",") For Column = 1 to 8 'insert stuff Next Column Row = Row + 1 Loop
然而,这对我来说并不合适,而且我相信如果是这样的话,我仍然需要处理额外的CR
字符。
谢谢。
asc(vbLF)=10 asc(vbCR)=13 asc(vbCRLF)=13
所以只能replacevbLF。
例
Sub test() Dim strTest As String strTest = "First Line " & vbLf & "Second Line" & vbCrLf & "Third Line" & vbCr & "Fourth Line" strTest = Replace(strTest, vbCrLf, vbCr) '/ Gets rid of double line breaks caused by next replacement strTest = Replace(strTest, vbLf, vbCr) MsgBox strTest End Sub