|
お世話になります。
社会人1年目のひよっこです。
PGとして入社しましたが現在は別の職種で勤務しております。
現在VBAでCSVファイルを読み込んで検索するツールを作成中です。
中でもプログレスバーを作成していることについて質問です。
ネットで検索し、CSVファイルを書き込みモードで読み込み、.Lineを取得することにより
素早くファイルの行数を取得できるロジックを参考にさせていただきながらコードを書いています。
処理自体はエラー無く走るのですが、どうしてもプログレスバーが表示されるまでに時間がかかってしまうのです。
デバックで処理を1行ずつ進めて確認した所、以下のコードの★マーク箇所で時間がかかるようです。
'プログレスバー進捗用処理
'ファイルの総行数格納用変数
Dim gCnt As Long
'複数ファイルの場合には、ファイルの数分ループさせ、全ファイルの行数を取得する
For fcount = 1 To UBound(UserForm1.FileName)
Dim FSO As Object, TargetFile As String
TargetFile = UserForm1.FileName(fcount)
'ファイルの存在確認(存在しなければ処理を中断する)
If Dir(UserForm1.FileName(fcount)) = "" Or TargetFile = "False" Then
MsgBox TargetFile & vbCrLf & "を取得できませんでした。" _
& vbCrLf & "ファイルを確認して下さい", vbCritical, "ファイル取得失敗"
Unload Me
Exit Sub
End If
'ファイルを書き込みモードで読み込む
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.OpenTextFile(TargetFile, 8)
'複数ファイルがある場合、ファイルの総行数を集計する
gCnt = gCnt + Line ★
.Close
End With
Set FSO = Nothing
Next
'総行数をプログレスバーのMaxに格納
ProgressBar.Max = gCnt
読み込むファイルのサイズは平均的に5・6Mと考えていただいて構いません。
ファイル要因でしょうか?それともコードの書き方がおかしいのでしょうか?
くだらない質問で申し訳ないのですが、よろしくお願い致します。
|
|