这有效:
Sub OpenCsvAsText(ByVal strFilepath As String)
Dim intFileNo As Integer
Dim iCol As Long
Dim nCol As Long
Dim strLine As String
Dim varColumnFormat As Variant
Dim varTemp As Variant
'// Read first line of file to figure out how many columns there are
intFileNo = FreeFile()
Open strFilepath For Input As #intFileNo
Line Input #intFileNo, strLine
Close #intFileNo
varTemp = Split(strLine, ",")
nCol = UBound(varTemp) + 1
'// Prepare description of column format
ReDim varColumnFormat(0 To nCol - 1)
For iCol = 1 To nCol
varColumnFormat(iCol - 1) = Array(iCol, xlTextFormat)
' What's this? See VBA help for OpenText method (FieldInfo argument).
Next iCol
'// Open the file using the specified column formats
Workbooks.OpenText _
Filename:=strFilepath, _
DataType:=xlDelimited, _
ConsecutiveDelimiter:=False, Comma:=True, _
FieldInfo:=varColumnFormat
End Sub
用法:
OpenCsvAsText "C:\MyDir\MyFile.txt"
现在,以逗号分隔的文件作为Excel工作表打开,所有列均设置为文本格式。
请注意,@ Wetmelon的向导解决方案效果很好,但是如果您打开许多文件,则可能像我一样每次都感到厌倦,滚动到第60列以便按住Shift并单击它。
EDIT @GSerg在下面的评论中指出,这“无效”,并且“占用空格和前导零”。我只引用该问题的评论,它更具描述性:
由于未知的原因,即使您明确为VBA中的所有列提供格式,如果文件扩展名是CSV,Excel也会忽略它。更改扩展名后,相同的代码将产生正确的结果。
因此,上面的代码“有效”,但是被这种可笑的Excel行为杀死了。无论采用哪种方式剪切,都不得不将扩展名更改为“ .csv”以外的其他内容,对不起!之后,您将有空。