vba打开txt文件,错误消息:文档可能是只读的或加密的



我正在编写vba代码来远程控制网络上的设备。基本上,设备会输出一个txt文件,我需要我的代码来后期处理它。这个想法是不必手动用deliminator在excel中打开txt文件。问题来了。

打开文件的代码段如下:

Workbooks.OpenText fileName:= _
    path, _
    origin:=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
    xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, _
    Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
    TrailingMinusNumbers:=True

代码在这里停止,并显示一个消息框,上面写着"Excel无法访问‘文件名’。文档可能是只读的或加密的。"

我做过的一些消除:

  1. 路径正确。我把它打印在一个牢房里,它是完全合法的
  2. 我可以正常打开文件。文件没有损坏或损坏
  3. 文件夹是只读的。但当我尝试打开其他只读文件夹中的其他txt文件时,它是有效的

我现在唯一能想到的是路径是基于网络的(类似于"\192.168.202.1\user(d)\user Files\filename.txt")。Btw网络运行良好。我尝试在windows资源管理器中键入路径,但没有出现任何问题。

请告知。谢谢

如果我发布的VBScript有效,我看不出以下代码在VBA中不起作用的任何原因(我写这篇文章是为了处理一个文本文件,使其符合您在评论中描述的范围)。

如果你愿意的话,试一下,告诉我进展如何。将中的实际文本文件目录替换为"C:\test.txt"

 Sub Test()
    Dim File As TextStream
    Set fso = CreateObject("SCripting.FileSystemObject")
    Set File = fso.OPenTextFile("C:test.txt")
    'Example Reading Values to Collection Object
    Dim Text As Collection
    Set Text = New Collection
    'Skip first 2 lines
    For i = 1 To 2
        File.SkipLine
    Next
    'Find first line that meets a condition
    'This example uses the condition that
    'the the current line of text starts with a number
    Do
        TempString = File.ReadLine
    Loop Until IsNumeric(Left(TempString, 1))
    'Current structure includes initial line from condition to be read
    Text.Add Split(TempString, ",")
    'Continue reading to end of file
    Do Until File.AtEndOfStream
        'Added protection against empty lines producing subscript
        'out of range error if array expected
        TempString = File.ReadLine
        If TempString <> "" Then
            Text.Add Split(TempString, ",")
        End If
    Loop
    'Example Converting Collection to Array
    Dim A1() As Variant 'First Column of Data
    Dim A2() As Variant 'Second Column of Data
    ReDim A1(Text.Count, 1 To 2)
    ReDim A2(Text.Count, 1 To 2)
    For i = 1 To Text.Count
        A1(i, 1) = Text(i)(0)
        A2(i, 1) = Text(i)(1)
    Next
    'Example Writing Array to Range
    Range("A1:A" & Text.Count) = A1
    Range("C1:C" & Text.Count) = A2
End Sub

最新更新