前提・実現したいこと
エクセルVBAでテキストファイルを開き、開いたファイルのデータをB列の一行目から一行ずつ代入していきたい。
発生している問題・エラーメッセージ
現在、拡張子"ls"だけ実行するようにしているが、拡張子"jbi"の時も実行するようにしたいがうまくいかない。
該当のソースコード
Const FILTER_JOB_JBI As String = "JBIファイル,.JBI,"
Const FILTER_JOB_LS As String = "LSファイル,.LS,"
Const FILTER_ALL As String = "すべてのファイル,."
Const DLG_TITLE_OPEN As String = "ファイルを開く"
Const JOB_ROW As Long = 2
Const JOB_COL As Long = 2
Public Sub File_Open()
Dim intFreeFile As Integer, fileToOpen As String, vBuff1 As Variant, vBuff2 As Variant
Dim i As Long, j As Long, strbuff1 As String, strBuff2() As String
' ---<ファイルを開く>ダイアログの表示
fileToOpen = Application.GetOpenFilename _
(FileFilter:=FILTER_JOB_LS & FILTER_JOB_JBI & FILTER_ALL, Title:=DLG_TITLE_OPEN)
' ---キャンセルされると<False>が返される
If fileToOpen = "False" Then Exit Sub
' ---ファイル名の取得
vBuff1 = Split(fileToOpen, "")
vBuff2 = Split(vBuff1(UBound(vBuff1)), ".")
' ---マクロの速度を向上させるため、画面を更新しないようにします
Application.ScreenUpdating = False
' ---使用可能なファイル番号を取得するために
intFreeFile = FreeFile
' ---ジョブの場合
If Not LCase(vBuff2(1)) = "ls" Then Exit Sub
' ---ファイルのオープン
Open fileToOpen For Input As intFreeFile
' ---マクロの速度を向上させるため、画面を更新しないようにします
Application.ScreenUpdating = False
Cells.Clear
' ---変数の初期化
strbuff1 = vbNullString
j = 0
' ---セルの行設定
i = JOB_ROW - 1
' ---データの読み込み
Do While Not EOF(intFreeFile)
i = i + 1
Line Input #intFreeFile, strbuff1 If Left$(strbuff1, 6) = "//NAME" Then Cells(1, 1).Value = "ジョブ名称 <" & Mid$(strbuff1, 8) & ">" ElseIf Left$(strbuff1, 5) = "/PROG" Then Cells(1, 1).Value = "プログラム名称 <" & Mid$(strbuff1, 7) & ">" End If
' ---セルにデータを書く
Cells(i, JOB_COL).Value = strbuff1
Loop
End Sub
試したこと
If Not LCase(vBuff2(1)) = "ls"の後にOr Case(vBuff2(1)) = "jbi"を追加してみました。
補足情報(FW/ツールのバージョンなど)
開くテキストファイルは200行くらいのデータです。
回答1件
あなたの回答
tips
プレビュー