如何在VBA中使用.OpenText打开文本文件,该文件以“ID”之类的第一列开头而不会出现SYLK错误

时间:2012-10-25 22:23:39

标签: excel vba excel-vba

我在Excel VBA的.OpenText方法中遇到了一个令人讨厌的小错误。当前两个字母为大写“ID”时,打开任何文本或CSV文件时出错。这是MS的文章,所以你知道我并不疯狂:http://support.microsoft.com/kb/323626

所以,我试图找出一种解决方法,它不涉及复制整个文件只是为了重命名第一个标题。我正在处理一些大型文本文件,这将是一个令人不满意的最后手段。

我在On Error Resume Next电话之前尝试了.OpenText但是没有用。有没有人遇到这个并找到了一个我想念的简单解决方案?有没有办法只是打开第一行并在文本文件中查找/替换?或者我可以使用.OpenText的额外参数?

3 个答案:

答案 0 :(得分:3)

我是为你写的。只需在尝试打开文件路径之前调用它。我故意用后期绑定写这个,所以不需要引用。如果文件以“ID”开头,它会在文件的开头添加一个撇号。

Sub FixIDProblem(filePath As String)
    Dim fso As Object
    Dim text As Object
    Dim contents as String
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(filePath) Then
        'Open the file for reading
        Set text = fso.OpenTextFile(filePath, 1)
        'Load the text contents to variable
        contents = text.ReadAll
        'Check for the forbidden text at the beginning
        If Left(contents, 2) = "ID" Then
            text.Close
            'Overwrite textfile with it's contents plus an apostraphe
            Set text = fso.OpenTextFile(filePath, 2)
            text.Write "'" & contents
        End If
        text.Close
    Else
        MsgBox "File does not exist"
    End If
    Set fso = Nothing
End Sub

答案 1 :(得分:0)

只需关闭提醒:

Application.DisplayAlerts = False
Application.Workbooks.OpenText Filename:="startwithID.tab"
Application.DisplayAlerts = True

答案 2 :(得分:0)

我这样做了:

Application.DisplayAlerts = False
On Error Resume Next
Workbooks.OpenText Filename:=myfile, DataType:=xlDelimited, Tab:=False, Semicolon:=True, Local:=True
Workbooks.OpenText Filename:=myfile, DataType:=xlDelimited, Tab:=False, Semicolon:=True, Local:=True
Application.DisplayAlerts = True

第一个OpenText失败,但第二个失效。

FixIDProblem是一个好主意但在大文件(~40MB)上失败