2015-03-19 43 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