ひさびさに仕事のお話
過去に作ったプログラムが、最近になってファイルエクスポート処理でエラーが出るとの報告がありました
調べてみると、事前に保存フォルダを作成する処理でエラーが出ている様子。
この部分はネットから探してきた”深くフォルダーを作ってくれるユーティリティ関数”をありがたく利用させていただいていました。
障害のポイントは大体わかるけど、解析するの面倒だなぁ~
と思いましたが、ここは単機能なのでいろいろ悩むよりも、作りなおしたほうが早く良い物ができる法則に従い、同様の機能を作成しなおしました。
作成のポイントは ・・・・
VB6の標準関数ではなくFileSystemObjectを使ったところ、コアの深いフォルダ作成する部分には再帰処理で実現。あと、クラスとして提供している部分かな?
自分用なので、いろいろと抜けはあると思います。
エラー処理もしていないので微妙ですね。
注意点はFileSystemObjectを利用している関係で参照設定にMicrosoft Scripting Runtimeを入れなければならないです。この件については、MSのサポートを見ると経緯が分かったりします>>ここ
以下がソースリストです。モジュールではなく、クラスなので注意しましょう。
- '
- '
- Private fso As FileSystemObject
- Private Function accepts(ByVal pth As String) As Boolean
- accepts = True
- If Left(pth, 2) = "\\" Then
- accepts = False
- End If
- End Function
- Private Function mCreateFolder(ByVal pth As String) As Folder
- Dim fld As Folder
- On Error Resume Next
- Set fld = fso.GetFolder(pth)
- If Err.Number = 76 Then
- Set mCreateFolder = mCreateFolder(fso.GetParentFolderName(pth))
- End If
- On Error GoTo 0
- If fld Is Nothing Then
- Set mCreateFolder = fso.CreateFolder(pth)
- End If
- End Function
- Public Function CreateFolder(ByVal pth As String) As Folder
- Set CreateFolder = Nothing
- If accepts(pth) Then
- Set CreateFolder = mCreateFolder(pth)
- End If
- End Function
- Private Sub Class_Initialize()
- Set fso = New FileSystemObject
- End Sub
- Private Sub Class_Terminate()
- Set fso = Nothing
- End Sub
ちなみにこれが過去に使わせていただいていたソース(一部処理を付け加えたかも?)
- '
- Public Function T_DeepMkdir(strPath As String) As Long
- Dim i As Integer
- Dim strPaths() As String
- Dim strTemp As String
- On Error GoTo err_T_DeepMKdir
- T_DeepMkdir = 0
- strPaths = Split(strPath, "\")
- strTemp = strPaths(LBound(strPaths))
- For i = LBound(strPaths) + 1 To UBound(strPaths)
- strTemp = strTemp + "\" + strPaths(i)
- If Dir(strTemp, vbDirectory) = "" Then
- Call MkDir(strTemp)
- End If
- Next
- Exit Function
- err_T_DeepMKdir:
- T_DeepMkdir = Err.Number
- MsgBox "フォルダ作成でエラー発生" & vbCrLf & vbCrLf & Err.Number & ":" & Err.Description & vbCrLf & vbCrLf & strPath, vbOKOnly, ""
- End Function
0 件のコメント:
コメントを投稿