我是VBA的新用户并试图阅读大尺寸的文本文件。有时也会出现一些MB大小的文本文件。
数据包括不同时间戳记中某些数字的打印结果。
我需要存储值的时间戳如下:
步骤时间已完成1.00,总时间已完成1.00
然后打印的数据如下:
90000354 1 -3.9630E-02 -3.5410E-02 -0.2695 0.4523 2.424 0.5630
现在,我想查找号码90000354并需要复制并粘贴这些数字-3.9630E-02,-3.5410E-02& -0.2695到excel表。现在,我正在使用以下代码,但它提出了问题。请帮助解决此问题。
非常感谢提前。
Option Explicit
Private Sub CommandButton1_Click()
Dim text As String, MyData As String, strData() As String, myFile As String, textLine As String
Dim v As Variant
Dim numIde As Long, i As Long
myFile = Application.GetOpenFilename("Dat Files (*.dat), *.dat")
Open myFile For Input As #1
MyData = Space$(LOF(1))
Do Until EOF(1)
Line Input #1, textLine
MyData = MyData & textLine & vbCrLf
Loop
Close #1
strData() = Split(MyData, vbCrLf)
numIde = 90000354
For i = LBound(strData) To UBound(strData)
If InStr(1, strData(i), numIde, vbTextCompare) Then
Cells(2, 2).Value = Mid(numIde, numIde + 20, 11)
Cells(2, 3).Value = Mid(numIde, numIde + 32, 11)
Cells(2, 4).Value = Mid(numIde, numIde + 44, 11)
Exit For
End If
Next i
End Sub
运行代码最终会出现如下错误:
“运行时错误'54':文件模式错误”
在尝试调试时,它停在此代码行“Get#1 ,, MyData”
答案 0 :(得分:0)
LibSSL
用于读取二进制数据,并且您想要阅读文本。使用Get
编辑:更新 - 这应该更好。读入每行,然后检查它。根据操作系统等的不同,可以节省使用可能识别或不识别vbCRLF的Line Input
功能。
做这样的事情:
Private Sub CommandButton1_Click()
split
如果您更喜欢它的完成方式,那么我之前发布的代码有点问题。它是将每行文本附加到单个字符串,而不是将其添加为新行,因此Dim text As String, MyData As String, strData() As String, myFile As String
Dim numIde As Integer
Dim i As Long
numIde = 90000354
myFile = Application.GetOpenFilename("Dat Files (*.dat), *.dat")
Open myFile For Input As #1
Do Until EOF(1)
Line Input #1, textline
If InStr(1, textline, numIde, vbTextCompare) Then
Cells(2, 2).Value = Mid(textline, numIde + 20, 11)
Cells(2, 3).Value = Mid(textline, numIde + 32, 11)
Cells(2, 4).Value = Mid(textline, numIde + 44, 11)
End If
Loop
Close #1
函数不起作用。这里更新的代码应该有效。
Split()