0

我在网上找到了这个功能

    Private Function FileFolderExists(strFullPath As String) As Boolean

    On Error GoTo EarlyExit
    If Not Dir(strFullPath, vbDirectory) = vbNullString then
        FileFolderExists = True
    End If

    EarlyExit:
    On Error GoTo 0
    End Function

我想像这样传递字符串变量

    Dim lineText As String
    ...
    ElseIf FileFolderExists(lineText) = False Then

我收到编译错误“byref 参数类型不匹配”

当我将 byval 放在 strFullPath 之前时,它似乎无法正常工作。我也尝试过使用 Dir 函数,如果我传递像“C:\test”这样的文字,它就可以工作,但如果我传递变量,它就不起作用。

是否有人具有检查文件夹存在并接受字符串变量作为参数的功能?

提前致谢

4

3 回答 3

1

问题似乎是 Word 将 CR 字符添加到每个段落,或者更准确地说,对象的Text属性Paragraph返回段落文本加上 CR 字符。

AFAIK,这是每个段落的 Word 行为,即使是最后一个段落。

这怎么会导致编译错误,我不知道。如果我以米兰为例:

Private Sub FirstLineFolder()
Dim lineText As String

lineText = ActiveDocument.Paragraphs(1).Range.Text
lineText = Left(lineText, Len(lineText) - 1) 'see below

MsgBox DoesFolderExist("C:\") 
MsgBox DoesFolderExist(lineText)
End Sub

如果文档的第一行是有效文件夹true,则返回。true如果我注释标记的行,程序仍会编译并运行并返回true, false(使用相同的文档)。

MSDN网站上有一些关于它的信息

于 2012-07-30T13:29:35.617 回答
0

试试这个:

Function FolderExists(folderPath As String) As Boolean

Dim f As Object
Set f = CreateObject("Scripting.FileSystemObject")

On Error GoTo NotFound
Dim ff As Object
Set ff = f.GetFolder(folderPath)
FolderExists = True
Exit Function

NotFound:
FolderExists = False
On Error GoTo 0

End Function

我使用以下方法对其进行测试:

Sub Tst()

Dim b As Boolean
Dim s As String
s = "c:\temp"
b = FolderExists(s)

End Sub

它按预期工作。

一般我Scripting.FileSystemObject都是用VBA里面所有文件相关的操作,native函数太麻烦了。

还应该注意的是,我的函数都检查文件夹,而原始函数——从它的名字来看——也许还试图检查文件是否存在。

于 2012-07-30T09:47:14.977 回答
0

新代码,它准确地解释了我需要什么,你应该更容易尝试。

我期待 Word 文档第一行中的文件夹,然后我必须检查它是否存在。

Private Sub FirstLineFolder()
Dim lineText As String

lineText = ActiveDocument.Paragraphs(1).range.Text

MsgBox DoesFolderExists("C:\") ' this works
MsgBox DoesFolderExists(lineText) ' this doesnt work, when same folder passed
End Sub

我和 Martin 的函数都抛出了我在第一篇文章中写的编译错误。

如果重要:Word 是 2010,没有写“选项显式”(我继承了代码,我无法更改)

于 2012-07-30T10:03:43.570 回答