2015-03-19 69 views
0

一般背景:InStr函数VBA:麻烦比较文件名的文本对象

我试图通过从Word文档,其中每一行是一个独特的样品名称的文本行迭代(如样本1,从含有在其文件名中的样品名称的特定文件夹样品2样本3),然后插入图像(例如的Sample1 a.png的Sample1 b.png样品2 xyz.pngSample3 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 

问题/问题:

  • 我不能让InStr在工作的时候comapre File.Name与sampleName (一个Range.Text对象)。

  • 但是,如果我使用If InStr(File.Name, "Sample1") > 0 Then而不是If InStr(File.Name, sampleName) > 0 Then,它会工作;尽管这不允许我遍历许多示例名称。

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

这个线程(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 

问题/问题:

  • 我有麻烦创建迪尔对象反复,因为我不能用绳子串连的sampleName文本对象。

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

C:\Test\*Sample1 
*.png 

感谢您的任何帮助,您可以提供!

回答

2

当你比较使用inStr你忘了Samplename是一款包括paragraph ending mark文本两项File.NamesampleName。您需要以任何方式剪切最后的字符,如:

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