2016-03-29 15 views
0

私は問題解決のためのフォーラムをしばらく見てきましたが、私は密集しているか、答えられていません。 。Wordマクロからマスへのハイパーリンクの可変長文字列

私の仕事は、建物の赤字を列挙した単語文書を作成し、その赤字の画像にハイパーリンクを付けることです。表示されるハイパーリンクのテキストは、常に['site abbreviation] [(image number)]。JPG'の形式に従います。たとえば、「管理ビルディング」を見ていると、イメージの名前は「AB(1).JPG」、「AB(2).JPG」などと呼ばれます。単語のドキュメントでは、それらは 'AB1'、 'AB2'などのように参照されます。

現在、テキストを選択すると自動的にハイパーリンクを作成するマクロがありますが、作成しようとしていますドキュメントを見て(またはより良い選択を強調表示する)、サイトの略語で一斉に始まるすべてのテキストにハイパーリンクを割り当てるマクロです。

大量のハイパーリンクを行っているマクロでは、私の現在の試行は辛いですが、重大なエラーが1つあります。最初に見つかったイメージ名を正しくハイパーリンクすると、後続のイメージはすべてリンクに含まれる次の2文字にリンクされます。たとえば、文章が「これは正しくありません(AB33)、これは正しいです(AB34)」、私のマクロは「AB34」と「AB33」というテキストをハイパーリンクします(これは間違っています)必要に応じて、私の同僚は、リンク先を変更するため)。

は、これは私がこれまでに取り組んできたマクロです(

)「... XXXX」のラインの間のテキストは、基本的な命令であることに注意してください
Option Explicit 


    Sub Mass_Hyperlink_v_1_1() 
'incomplete: selects incorrect text after first link 

Dim fileName As String 
Dim filePath As String 
Dim rng As Range 
Dim tag As String 
Dim FileType As String 
Dim folder As String 
Dim space As String 
Dim start As String 
Dim report_type As String 
Dim temp As String 

'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
'Do not touch anything above this line 

    'Answer the following for the current document. Leave all quotations. 

    report_type = "CL"   'CL = Checklist 
           'SR = Site Report 

    folder = "Doors"   'The name of the folder you are linking images from 
           'Must match folder exactly 

    tag = "FS"     'Put file prefix here (ex. if link says "AB123", put "AB") 

    space = "No"    'Does the image file have a space in it? (ex. if file name is "AB (23)", put "yes") 

    FileType = ".JPG"   'make sure filetype extensions match 

'Do not touch anything below this line 
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

If space = "Yes" Then 
    start = "%20(" 
    Else: start = "(" 
End If 

If report_type = "CL" Then 
    folder = "..\Images\" & folder 
    Else: folder = folder 
End If 

If report_type = "SR" Then 
    folder = "Images\" & folder 
    Else: folder = folder 
End If 

Set rng = ActiveDocument.Range 

With rng.find 
.MatchWildcards = True 
    Do While .Execute(findText:=tag, Forward:=False) = True 
     rng.MoveStartUntil (tag) 
     rng.Select 
     Selection.Extend 
     Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend 


     'I believe the issue is created here 

     Selection.start = Selection.start + Len(tag) 

     ActiveDocument.Range(Selection.start - Len(tag), Selection.start).Delete 

    fileName = Selection.Text 

    filePath = folder & "\" & tag & start & fileName & ")" & FileType 

    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, address:= _ 
     filePath, SubAddress:="", ScreenTip:="", TextToDisplay:= _ 
     tag & Selection.Text 

    rng.Collapse wdCollapseStart 


    Loop 
End With 

End Sub 

私がこれをひどく間違って説明した場合、または十分な情報が提供されていない場合は、私に知らせてください、私はより明確にしようとします。私に教えてください!ありがとう!

編集:タグのテキストを含む単語とは対照的に、タグで始まる単語だけを選択する方法を知っている人は、私も信じられないほど感謝しています。

+0

があなたの検索で.MatchWholeWord = Trueの設定だけでタグを一致させる - マクロを使用しますそのようなもののためのレコーダー。また、テキストが常に「正しくない」場合は、その多くの文字を取り消し、Not Correctに一致するかどうかを確認します。 – Sorceri

+0

.MatchWholeWord = Trueの場合、テキスト文字列にタグ以外のものが含まれている場合は正常に動作しますか?たとえば、その関数は "AB"だけを検索してタグ "AB324"を見つけることができますか? 私は、この例では「正しくない」と「正しい」と明記していないことをお詫びします。そのテキストはドキュメントの一部ではありません。 – Tornadospoon

+0

いいえ、それを削除してマッチするように伝えることはできません。そして、それはAbを拾いませんが、あなたの例を拾うでしょう – Sorceri

答えて

0

あなたは数字の可変数に続いて、固定タグを一致させたい場合は:

Sub Tester() 
    TagMatches ActiveDocument, "AB" 
End Sub 


Sub TagMatches(doc As Document, tag As String) 
    Dim rng 

    Set rng = doc.Range 

    With rng.Find 
     .Text = tag & "[0-9]{1,}" 
     .Forward = True 
     .MatchWildcards = True 
     Do While .Execute 
      Debug.Print rng.Text 
     Loop 
    End With 

End Sub 

参照:http://word.mvps.org/faqs/general/usingwildcards.htm

+0

ありがとう!私は自由な瞬間があるとすぐにその解決策を検討します! – Tornadospoon

+0

ありがとうございました!私はそれを私のマクロに折りたたんで、それは夢のように機能します!あなたは、あなたの提案が将来私を救うのにどれくらいの時間があるか分かりません! – Tornadospoon