Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1908to1912
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Hyperlinks in Word-Tabelle (Word-VBA)

Hyperlinks in Word-Tabelle (Word-VBA)
08.12.2022 10:15:48
Silvan
Wunderschönen guten Tag!
"Vorwort"
Ich weiss, dass dies ein Excel-Forum ist und nicht speziel für Word.
Aber da ich weiss, dass man durch Excel-vba auch in Word Tabellen erstellen kann, kann ich mir vorstellen, dass dieses Problem troz WORD-vba vermutlich einfach lösbar sein müsste.
Lieber Leser:
Ich versuche aktuell in einem Word-Dokument mittels VBA automatisiert Hyperlinks, welche auf andere Dokumente Zeigen, zu erzeugen.
Mein VBA-Code-Entwurf zu unterst
Zentral in einem Ordner sind alle Dokumente abgelegt, welche mittels Link geöffnet werden sollen.
Ich habe in meinem Word-Dokument eine Tabelle mit zwei Spalten.
(siehe hier die Tabelle)
https://www.herber.de/bbs/user/156585.doc
Die 1.te Spalte enthält der Name des Dokuments und die 2-te Spalte die Datei-Endung. Zmb. ".pdf" . Mittels Stringoperation führe ich die beiden "Strings" zusammen. Und dann erzeuge ich anhand dieses Strings einen Hyperlink.
Leider ist es nun so, dass dieser "zusammengefügter String" Zeichen enthält, welche ich nicht verstehe, woher sie kommen. Und deshalb funktioniert dann auch der Link nicht.
Folgender nicht funktionierender Link wird erzeugt "Dokument1%0d%07.pdf%0d%07"
Ich bräuchte aber nur "Dokument1.pdf"
Ebenfalls wird beim Schreiben des Links in die Tabelle eine ungewollte leere Zeile in die Zelle eingefügt.
Woher kommen im erzeugen Link diese %0d%07 %0d%07 Zeichen? Wie entferne ich diese?
Wie entferne ich die erzeugte Leerzeile in der Word-Tabelle?
-> Besten Dank für die Rückmeldungen.
Ps: Ich bin nicht besonders mit VBA bewandert, aber ich lerne gerne dazu und möchte das Grundproblem verstehen.
Word 2019, Windows 10
________________________________________

Option Explicit
Sub InsertTextInCell()
Dim anzZeilen As Integer, i As Integer
Dim Text1 As String
Dim Text2 As String
Dim Text3 As String
Dim myrange As Object
Dim myCell_1 As Object
Dim myCell_2 As Object
anzZeilen = ActiveDocument.Tables(1).Rows.Count 'Zählt die Zeilen der Tabelle 2
If ActiveDocument.Tables.Count >= 1 Then
For i = 2 To anzZeilen ' Schleife durch alle Zeilen, starte bei zweiter Zeile
Set myCell_1 = ActiveDocument.Tables(1).Cell(Row:=i, Column:=1) 'Tabelle_2, Zeile i, 1 Spalte
Text1 = myCell_1 'Inhalt der Zelle in String kopieren
Set myCell_2 = ActiveDocument.Tables(1).Cell(Row:=i, Column:=2) 'Tabelle_2, Zeile i, 2 Spalte
Text2 = myCell_2 'Inhalt der Zelle in String kopieren
Text3 = Text1 & Text2 'Erzeuge zusammenhängender String
Set myCell_1 = ActiveDocument.Tables(1).Cell(Row:=i, Column:=1) 'Tabelle_2, Zeile i, 1 Spalte
'myCell_1 = Text3 ' kopiere erzeugten String in Zelle.
Set myrange = ActiveDocument.Tables(1).Cell(Row:=i, Column:=1).Range
'Erzeugt ein range-Objekt auf die Zelle, in der der Link stehen soll
ChangeFileOpenDirectory "C:\Users\debsil\Desktop\"
ActiveDocument.Hyperlinks.Add Anchor:=myrange, Address:= _
Text3, SubAddress:="", ScreenTip:="Click to open document", TextToDisplay:=Text1
Next i
End If
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hyperlinks in Word-Tabelle (Word-VBA)
08.12.2022 11:48:58
Jowe
Hallo Silvan,
ich habe Deinen Code mit einem Functions-Code aus dem Netz (https://www.vbarchiv.net/tipps/tipp_128-ersetzen-von-nicht-druckbaren-zeichen.html) kombiniert. Ob das nun mit der Erzeugung des Links so klappt musst Du testen.

Option Explicit
Sub InsertTextInCell()
Dim anzZeilen As Integer, i As Integer
Dim Text1 As String
Dim Text2 As String
Dim Text3 As String
Dim myrange As Object
Dim myCell_1 As Object
Dim myCell_2 As Object
anzZeilen = ActiveDocument.Tables(1).Rows.Count 'Zählt die Zeilen der Tabelle 2
If ActiveDocument.Tables.Count >= 1 Then
For i = 2 To anzZeilen ' Schleife durch alle Zeilen, starte bei zweiter Zeile
Set myCell_1 = ActiveDocument.Tables(1).Cell(Row:=i, Column:=1) 'Tabelle_2, Zeile i, 1 Spalte
Text1 = Left(myCell_1, Len(myCell_1) - 1) 'Inhalt der Zelle in String kopieren
Text1 = ReplaceForSaving(Text1)
Set myCell_2 = ActiveDocument.Tables(1).Cell(Row:=i, Column:=2) 'Tabelle_2, Zeile i, 2 Spalte
Text2 = Mid(myCell_2, 1, 99) 'Inhalt der Zelle in String kopieren
Text2 = ReplaceForSaving(Text2)
Text3 = Text1 & Text2 'Erzeuge zusammenhängender String
Text3 = Replace(Text3, Chr(7), "")
Debug.Print Text3
Set myCell_1 = ActiveDocument.Tables(1).Cell(Row:=i, Column:=1) 'Tabelle_2, Zeile i, 1 Spalte
'myCell_1 = Text3 ' kopiere erzeugten String in Zelle.
Set myrange = ActiveDocument.Tables(1).Cell(Row:=i, Column:=1).Range
'Erzeugt ein range-Objekt auf die Zelle, in der der Link stehen soll
ChangeFileOpenDirectory "C:\Users\debsil\Desktop\"
ActiveDocument.Hyperlinks.Add Anchor:=myrange, Address:= _
Text3, SubAddress:="", ScreenTip:="Click to open document", TextToDisplay:=Text1
Next i
End If
End Sub
Public Function ReplaceForSaving(psText As String) As String
' Ersetzt in der übergebenen Zeichenkette nicht
' druckbare Zeichen, wie Zeilenumbruch oder Tabulator
' durch druckbare Zeichen wie /n
' Umkehrfunktion ReplaceForShowing
' Ersetzungstabelle:
' Wagenrücklauf (vbCr)      ->  /c
' Zeilenumbruch (vbLf)      ->  /l
' Tabulator (vbTab)         ->  /t
' Anführungszeichen (")     ->  /q
Dim sText As String
sText = psText
' Zuerst vorhandene Slash-Zeichen durch
' /s ersetzen
sText = Replace(sText, "/", "/s")
' dann eigentliche Ersetzung
sText = Replace(sText, vbCr, "") '"/c")
sText = Replace(sText, vbLf, "") '"/l")
sText = Replace(sText, vbTab, "") '"/t")
sText = Replace(sText, Chr(34), "") '"/q")
ReplaceForSaving = sText
End Function
Gruß
Jochen
Anzeige
AW: Hyperlinks in Word-Tabelle (Word-VBA)
09.12.2022 09:24:35
Silvan
Guten Tag Jochen
Besten Dank für den Hinweis!
Der hat mich tatsächlich auf die richtige Spur geführt.
Es ist tatsächlich so, dass Word zu Formatierungszwecken jeweils unsichtbare Zeichen in die Tabelle einfügt.
genauer sind es die Zeichen ANSI 13 und ANSI 07.
=> Chr(7), Chr(13)
Wenn man nun den Word-Tabelleninhalt in einen String kopiert, kopiert man diese Zeichen aus der Word-Tabelle mit.
Diese Zeichen werden als "end of cell marker" bezeichnet.
Da es sehr spezielle Zeichen sind, funktioniert vbCr, vbCl, vbTab nicht.
Diese Zeichen müssen dann händisch, wie vorgeschlagen, mit Replace entfernt werden.
Diese habe ich auch so umgesetzt.
Nochmals Danke!
Hier mein Code, welcher automatisch aus einer Tabelle Hyperlinks erzeugt.
Wenn in Word relative Pfade gewählt werden, funktioniert das öffnen dieser Links auch aus einem PDF auf fremden Systemen.

Option Explicit
Sub InsertTextInCell()
Dim anzZeilen As Integer, i As Integer
Dim Text1 As String
Dim Text2 As String
Dim Text3 As String
Dim myrange As Object
Dim myCell_1 As Object
Dim myCell_2 As Object
anzZeilen = ActiveDocument.Tables(5).Rows.Count 'Zählt die Zeilen der Tabelle 2
If ActiveDocument.Tables.Count >= 1 Then
For i = 2 To anzZeilen ' Schleife durch alle Zeilen, starte bei zweiter Zeile
Set myCell_1 = ActiveDocument.Tables(5).Cell(Row:=i, Column:=2) 'Tabelle_5, Zeile i, 1 Spalte
Text1 = CStr(myCell_1) 'Inhalt der Zelle in String kopieren
Text1 = Replace(Text1, Chr(7), "")
'Text1 = Replace(Text1, Chr(10), "")
Text1 = Replace(Text1, Chr(13), "")
'Text1 = Replace(Text1, Chr(16), "")
Set myCell_2 = ActiveDocument.Tables(5).Cell(Row:=i, Column:=3) 'Tabelle_5, Zeile i, 2 Spalte
Text2 = myCell_2 'Inhalt der Zelle in String kopieren
Text2 = Replace(Text2, Chr(7), "")
'Text2 = Replace(Text2, Chr(10), "")
Text2 = Replace(Text2, Chr(13), "")
'Text2 = Replace(Text2, Chr(16), "")
Text3 = (Text1 & Text2) 'Erzeuge zusammenhängender String
Text3 = Replace(Text3, Chr(7), "")
'Text3 = Replace(Text3, Chr(10), "")
Text3 = Replace(Text3, Chr(13), "")
'Text3 = Replace(Text3, Chr(16), "")
Set myCell_1 = ActiveDocument.Tables(5).Cell(Row:=i, Column:=2) 'Tabelle_5, Zeile i, 1 Spalte
'myCell_1 = Text3 ' kopiere erzeugten String in Zelle.
Set myrange = ActiveDocument.Tables(5).Cell(Row:=i, Column:=2).Range
'Erzeugt ein range-Objekt auf die Zelle, in der der Link stehen soll
ChangeFileOpenDirectory "C:\SmarTeam\Work\"
ActiveDocument.Hyperlinks.Add Anchor:=myrange, Address:= _
"C:\SmarTeam\Work\Verlinkte_Dokumente\" & Text3, SubAddress:="", ScreenTip:="Click to open document", TextToDisplay:=Text1
Next i
End If
Problem gelöst.
Kann geschlossen werden.
Anzeige
AW: Hyperlinks in Word-Tabelle (Word-VBA)
09.12.2022 11:33:45
Jowe
Hallo Silvan,
das freut mich :-)
der Code in kürzer:

Option Explicit
Sub InsertTextInCell()
Dim anzZeilen As Integer, i As Integer
Dim Text1 As String
Dim Text2 As String
Dim Text3 As String
Dim myrange As Object
Dim myCell_1 As Object
Dim myCell_2 As Object
anzZeilen = ActiveDocument.Tables(1).Rows.Count 'Zählt die Zeilen der Tabelle 2
If ActiveDocument.Tables.Count >= 1 Then
For i = 2 To anzZeilen ' Schleife durch alle Zeilen, starte bei zweiter Zeile
Set myCell_1 = ActiveDocument.Tables(5).Cell(Row:=i, Column:=2) 'Tabelle_5, Zeile i, 1 Spalte
Text1 = Replace(Replace(CStr(myCell_1), Chr(7), ""), Chr(13), "")
Set myCell_2 = ActiveDocument.Tables(5).Cell(Row:=i, Column:=3) 'Tabelle_5, Zeile i, 2 Spalte
Text2 = Replace(Replace(CStr(myCell_2), Chr(7), ""), Chr(13), "")
Text3 = (Text1 & Text2) 'Erzeuge zusammenhängender String
Set myCell_1 = ActiveDocument.Tables(5).Cell(Row:=i, Column:=2) 'Tabelle_5, Zeile i, 1 Spalte
Set myrange = ActiveDocument.Tables(5).Cell(Row:=i, Column:=2).Range
'Erzeugt ein range-Objekt auf die Zelle, in der der Link stehen soll
ChangeFileOpenDirectory "C:\SmarTeam\Work\"
ActiveDocument.Hyperlinks.Add Anchor:=myrange, Address:= _
"C:\SmarTeam\Work\Verlinkte_Dokumente\" & Text3, SubAddress:="", ScreenTip:="Click to open document", TextToDisplay:=Text1
Next i
End If
End Sub
Gruß
Jochen
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige