ひさびさに仕事のお話
過去に作ったプログラムが、最近になってファイルエクスポート処理でエラーが出るとの報告がありました
調べてみると、事前に保存フォルダを作成する処理でエラーが出ている様子。
この部分はネットから探してきた”深くフォルダーを作ってくれるユーティリティ関数”をありがたく利用させていただいていました。
障害のポイントは大体わかるけど、解析するの面倒だなぁ~
と思いましたが、ここは単機能なのでいろいろ悩むよりも、作りなおしたほうが早く良い物ができる法則に従い、同様の機能を作成しなおしました。
作成のポイントは ・・・・
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 件のコメント:
コメントを投稿