2017-09-22 23 views
0

IncludePictureフィールドで追加された画像にハイパーリンクを追加しようとしています。リンクされた画像にハイパーリンクを追加する

たとえば、これはイメージです:

{ IncludePicture "C:\\Test\\Image 1.png" \d } 

だから、それはそれにハイパーリンクを追加する必要があります。その後

C:\\Test\\Image 1.png 

、私はマウスを使って文書に私の画像をクリックすることができますそれはファイルマネージャで開かれます。

ここにコードがあります。何らかの理由で、正常に動作しません。どのように修正する必要がありますか?

Sub AddHyperlinksToImages() 
    On Error Resume Next 
    Application.ScreenUpdating = False 
    Dim iShp As InlineShape 
    For Each iShp In ActiveDocument.InlineShapes 
     iShp.Hyperlink.Address = iShp.LinkFormat.SourceFullName 'Doesn't work 

     'Just for testing 
     'fullPath = iShp.LinkFormat.SourceFullName 
     'MsgBox fullPath 
    Next 
    Application.ScreenUpdating = True 
End Sub 

答えて

1

このコードを試してください。

Sub AddHyperlinksToImages() 
    ' 22 Sep 2017 

    Dim Fld As Field 
    Dim FilePath As String 
    Dim Tmp As String 
    Dim i As Integer 

    Application.ScreenUpdating = False 
    ActiveDocument.Fields.Update 
    For Each Fld In ActiveDocument.Fields 
     With Fld 
      If InStr(1, Trim(.Code), "includepicture", vbTextCompare) = 1 Then 
       If .InlineShape.Hyperlink Is Nothing Then 
        i = InStr(.Code, Chr(34)) 
        If i Then 
         FilePath = Replace(Mid(.Code, i + 1), "\\", "\") 
         i = InStr(FilePath, "\*") 
         If i Then FilePath = Left(FilePath, i - 1) 
         Do While Len(FilePath) > 1 
          i = Asc(Right(FilePath, 1)) 
          FilePath = Left(FilePath, Len(FilePath) - 1) 
          If i = 34 Then Exit Do 
         Loop 
         If i > 1 Then ActiveDocument.Hyperlinks.Add .InlineShape, FilePath 
        End If 
       End If 
      End If 
     End With 
    Next Fld 
    Application.ScreenUpdating = True 
End Sub 
+0

ありがとうございました。部分的に機能します。現在、私はそれをいくらか修正しようとしています。いくつかの問題があります:1)ドキュメントを開いてマクロを起動すると、エラーが表示されます。このエラーを回避するには、イメージを更新する必要があります。つまり、まずドキュメントを開き、次にCtrl-Aを押し、次にF9を押してマクロを起動します。この方法では、スクリプトはエラーなしで起動されます。 2)ハイパーリンクは少し壊れています。2.1)パスに空白が含まれているといくつかの文字が切り詰められます。2.2)何らかの理由で、\\のパスが\\\\になります。 [ここにそれを示すイメージがあります](https://i.imgur.com/aLVllJy.png)。 – james

+0

私が理解しているように、スペースに関する問題は、 'FilePath = Split(Trim(Replace .Code、"、 "%20")))(1) 'を使って修正することができます。しかし、それは動作しません。 'FilePath = Split(Trim(Replace、.Code、" img "、" img%20 ")))(1)'のようなものがうまく動作するので、少し奇妙です。 – james

+0

1。フィールドを更新するためのコードを追加することができます。私はそれが 'ActiveDocument.Fields.Update'のようなもので、プロシージャの始めに追加されるかもしれないと思います。 – Variatus

関連する問題