Этот код не делает то, что вы ожидаете:
If Dir(SigString) <> "" Then
Signature = GetBoiler(SigString)
Else
Signature = ""
End If
Если вы передадите пустую строку (""
) или vbNullString
в Dir
, будет возвращено имя первого файла в текущем пути каталога (путь, возвращаемый CurDir$
). Таким образом, если SigString
пусто, ваше условие If
оценивается как True
, поскольку Dir
вернет непустую строку (имя первого файла в текущем каталоге), а GetBoiler
называется. А если SigString
пусто, вызов fso.GetFile
не удастся.
Вы должны либо изменить свое состояние, чтобы убедиться, что SigString
не пусто, либо использовать метод FileSystemObject.FileExists
вместо Dir
для проверки, существует ли файл. Dir
сложно использовать именно потому, что он делает то, чего вы не ожидаете. Лично я бы использовал Scripting.FileSystemObject
вместо Dir
, потому что нет ничего смешного (FileExists
возвращает True
, если файл существует, и, ну, False
, если его нет). Более того, FileExists
выражает намерение вашего кода гораздо яснее, чем Dir
.
Метод 1: сначала убедитесь, что SigString
не пусто
If SigString <> "" And Dir(SigString) <> "" Then
Signature = GetBoiler(SigString)
Else
Signature = ""
End If
Метод 2: Используйте метод FileSystemObject.FileExists
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(SigString) Then
Signature = GetBoiler(SigString)
Else
Signature = ""
End If