いまさらテキストファイルの読み書き
テキストファイルにデータを書き出したい、または読み込みたい。ああ、なんだっけLine Inputだっけなんだっけ? FreeFileいるよな。調べるの面倒くせー
というわけで仕方なくクラスを書くことにしました。コピペで済ませたい人は、このクラスをコピーしてください。それにしてもこのコード書くの何回目だろう。
使用例:
Public Sub sample1() Dim oTmpFile As FileStream Dim buff As String Set oTmpFile = New FileStream If oTmpFile.OpenReadStream("sample.txt") < 0 Then MsgBox "エラーが発生しました" & vbCr & oTmpFile.Error, vbCritical Exit Sub End If Do Until oTmpFile.EOF buff = oTmpFile.ReadStream Debug.Print buff Loop oTmpFile.CloseStream End Sub Public Sub sample2() Dim oTmpFile As FileStream Dim buff As String Dim i As Long Set oTmpFile = New FileStream If oTmpFile.OpenWriteStream("sample.txt") < 0 Then MsgBox "エラーが発生しました" & vbCr & oTmpFile.Error, vbCritical Exit Sub End If For i = 0 To 9 oTmpFile.WriteStream "Hello World: " & i Loop oTmpFile.CloseStream End Sub
クラス名: FileStream
Option Explicit
Private m_iFileNum As Integer
Private m_sError As String
Public Function OpenWriteStream(pFile As String) As Long
On Error GoTo Error
m_iFileNum = FreeFile
Open ThisWorkbook.Path & "\" & pFile For Output As #m_iFileNum
OpenWriteStream = 0
Exit Function
Error:
m_sError = Error$
OpenWriteStream = -1
End Function
Public Function OpenReadStream(pFile As String) As Long
On Error GoTo Error
m_iFileNum = FreeFile
Open ThisWorkbook.Path & "\" & pFile For Input As #m_iFileNum
OpenReadStream = 0
Exit Function
Error:
m_sError = Error$
OpenReadStream = -1
End Function
Public Function EOF() As Boolean
EOF = VBA.EOF(m_iFileNum)
End Function
Public Sub WriteStream(pBuff As String)
Print #m_iFileNum, pBuff
End Sub
Public Function ReadStream() As String
Dim buff As String
Line Input #m_iFileNum, buff
ReadStream = buff
End Function
Public Sub CloseStream()
If m_iFileNum > 0 Then Close #m_iFileNum
m_iFileNum = -1
End Sub
Private Sub Class_Initialize()
m_iFileNum = -1
End Sub
Private Sub Class_Terminate()
If m_iFileNum > 0 Then Close #m_iFileNum
End Sub
Public Property Get Error() As String
Error = m_sError
End Property
VBAの編集画面っぽい色を付けてみたんですが、あまりにも面倒なのでもう2度とやらないと思います。
更新:2019/11/26
HTMLで色付きのフォーマットに書き換えて、HTML編集モードでペーストすればカラーパレットを何十回もクリックしなくても済むということを思いついたのでコードを書いてみました。
更新:2019/12/15
<pre></pre>とCSSで記述するやり方にコードを書き換えました。