私は問題解決のためのフォーラムをしばらく見てきましたが、私は密集しているか、答えられていません。 。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
私がこれをひどく間違って説明した場合、または十分な情報が提供されていない場合は、私に知らせてください、私はより明確にしようとします。私に教えてください!ありがとう!
編集:タグのテキストを含む単語とは対照的に、タグで始まる単語だけを選択する方法を知っている人は、私も信じられないほど感謝しています。
があなたの検索で.MatchWholeWord = Trueの設定だけでタグを一致させる - マクロを使用しますそのようなもののためのレコーダー。また、テキストが常に「正しくない」場合は、その多くの文字を取り消し、Not Correctに一致するかどうかを確認します。 – Sorceri
.MatchWholeWord = Trueの場合、テキスト文字列にタグ以外のものが含まれている場合は正常に動作しますか?たとえば、その関数は "AB"だけを検索してタグ "AB324"を見つけることができますか? 私は、この例では「正しくない」と「正しい」と明記していないことをお詫びします。そのテキストはドキュメントの一部ではありません。 – Tornadospoon
いいえ、それを削除してマッチするように伝えることはできません。そして、それはAbを拾いませんが、あなたの例を拾うでしょう – Sorceri