InStr 函数 VBA: 将文件名与文本对象进行比较时遇到问题

InStr function VBA: trouble comparing file name with text object

一般背景:

我正在尝试遍历 Word 文档中的文本行,其中每一行都是一个唯一的示例名称(例如 Sample1Sample2, Sample3),然后插入文件名中包含样本名称的特定文件夹中的图像(例如 Sample1 a.png示例 1 b.png示例 2 xyz.png示例 3 xxx.png ).

我使用的代码示例:

Dim fso As New FileSystemObject
Set MySource = fso.GetFolder("C:\Test\")
numParas = ActiveDocument.Paragraphs.Count

counter = 0
While counter < numParas
    counter = counter + 1
    sampleName = ActiveDocument.Paragraphs(counter).Range.Text
    For Each File In MySource.Files
        If InStr(File.Name, sampleName) > 0 Then 
            ' Insert script here to insert pictures
            MsgBox ("File found")
        End If
    Next File
Wend

问题/问题:

从文件夹添加文件的其他选项:

此线程 (Loop through files in a folder using VBA?) 展示了循环访问文件夹中文件的更快捷方式。我尝试使用 Dir 和以下代码:

Dim StrFile As String
Dim FolderStr As String

numParas = ActiveDocument.Paragraphs.Count
counter = 0
While counter < numParas
    counter = counter + 1
    sampleName = ActiveDocument.Paragraphs(counter).Range.Text
    FolderStr = "C:\Test\*" + sampleName + "*.png"
    MsgBox (FolderStr) 'First message box
    StrFile = Dir("C:\Test\*" + sampleName + "*.png")
    Do While Len(StrFile) > 0
        ' Insert script here to insert pictures
        MsgBox ("File found")
        StrFile = Dir
    Loop
Wend

Questions/problems:

例如,在上面脚本的第一个消息框中,我得到以下输出,文件地址在两个单独的行而不是一个字符串上。

C:\Test\*Sample1
*.png

感谢您提供的任何帮助!

当您使用 inStr 比较两个项目 File.NamesampleName 时,您会忘记 Samplename 是来自包含 paragraph ending mark 的段落的文本。您需要以任何方式剪切最后一个字符,例如:

sampleName = ActiveDocument.Paragraphs(counter).Range.Text
sampleName = Left(sampleName, Len(sampleName) - 1)   'this new line removes paragraph ending mark