このマクロコードはMicrosoft Office Word 2003にあり、テキストファイルの行を読み取ります。行はそれぞれ、後でコードで使用する必要がある文字列値を表します。
ただし、テキストファイルの最初の2行には、不要なものが含まれています。最初の2行をスキップするようにコードを変更するにはどうすればよいですか? WordのVBAエディタ内の "Intellisense"は、ハード..
とにかく、コードは次のようになります
Dim sFileName As String
Dim iFileNum As Integer
Dim sBuf As String
Dim Fields as String
sFileName = "c:\fields.ini"
''//Does the file exist?
If Len(Dir$(sFileName)) = 0 Then
MsgBox ("Cannot find fields.ini")
End If
iFileNum = FreeFile()
Open sFileName For Input As iFileNum
Do While Not EOF(iFileNum)
Line Input #iFileNum, Fields
MsgBox (Fields)
そして、このコードは現在すべての行を提供しており、最初の2行は必要ありません。
その全体Open <file path> For Input As <some number>
事はso 1990sです。また、速度が遅く、エラーが発生しやすくなります。
VBAエディターで、[ツール]メニューから[参照設定]を選択し、ほとんどすべてのXPまたはVistaマシンで利用できるはずの "Microsoft Scripting Runtime"(scrrun.dll)を探します。これを選択します。これで、(少なくとも私にとっては)かなり堅牢なソリューションにアクセスできるようになります。
With New Scripting.FileSystemObject
With .OpenTextFile(sFilename, ForReading)
If Not .AtEndOfStream Then .SkipLine
If Not .AtEndOfStream Then .SkipLine
Do Until .AtEndOfStream
DoSomethingImportantTo .ReadLine
Loop
End With
End With
ランダムアクセスを使用できます。
Open "C:\docs\TESTFILE.txt" For Random As #1
Position = 3 ' Define record number.
Get #1, Position, ARecord ' Read record.
Close #1
Open sFileName For Input As iFileNum
Dim LineNum As Long
LineNum = 0
Do While Not EOF(iFileNum)
LineNum = LineNum + 1
Line Input #iFileNum, Fields
If LineNum > 2 Then
DoStuffWith(Fields)
End If
Loop
単純化しすぎているのでしょうか?
次のコードを追加するだけです。
Open sFileName For Input as iFileNum
Line Input #iFileNum, dummy1
Line Input #iFileNum, dummy2
........
スンダー
Dim sFileName As String
Dim iFileNum As Integer
Dim sBuf As String
Dim Fields as String
Dim TempStr as String
sFileName = "c:\fields.ini"
''//Does the file exist?
If Len(Dir$(sFileName)) = 0 Then
MsgBox ("Cannot find fields.ini")
End If
iFileNum = FreeFile()
Open sFileName For Input As iFileNum
''//This part skips the first two lines
if not(EOF(iFileNum)) Then Line Input #iFilenum, TempStr
if not(EOF(iFileNum)) Then Line Input #iFilenum, TempStr
Do While Not EOF(iFileNum)
Line Input #iFileNum, Fields
MsgBox (Fields)
Loop