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 引数の型が一致しません」というコンパイル エラーが発生します。

strFullPath の前に byval を入れると、うまく動作しないようです。Dir 関数も試してみました。「C:\test」のようにリテラルを渡すと機能しますが、変数を渡すと機能しません。

フォルダの存在をチェックし、文字列変数をパラメータとして受け入れる機能を持っている人はいますか?

前もって感謝します

4

3 に答える 3

1

問題は、Word がすべての段落に CR 文字を追加すること、またはより正確にTextは、オブジェクトのプロパティがParagraph段落テキストと CR 文字を返すことです。

私の知る限り、これは最後の段落であっても、すべての段落に対する 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マークされた行にコメントを付けると、プログラムは引き続きコンパイルおよび実行されtruefalse(同じドキュメントで) が返されます。

MSDN Web サイトにいくつかの情報があります

于 2012-07-30T13:29:35.617 に答える
0

Try this:

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

I used the following to test it:

Sub Tst()

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

End Sub

And it works as expected.

Generally, I used Scripting.FileSystemObject for all file-related operation in VBA, the native functions are too cumbersome.

It should be also noted that my function all checks for folders, while the original function -- judging by its name -- perhaps also tried to check for existence of files.

于 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

私とマーティンの関数の両方が、最初の投稿で書いたコンパイル エラーをスローしています。

それが重要な場合:Wordは2010年で、「明示的なオプション」は書かれていません(コードを継承したため、変更できません)

于 2012-07-30T10:03:43.570 に答える