Nimm dir
Option Explicit
Public Sub AlterBookmark(ByVal Name As String, ByVal Expression As Variant, Optional ByVal Document As Word.Document)
If Document Is Nothing Then Set Document = ActiveDocument
If Not Document.Bookmarks.Exists(Name) Then
Err.Raise 5&, "AlterBookmark"
Else
Dim rng As Word.Range
Set rng = Document.Bookmarks(Name).Range
If TypeOf Expression Is Excel.Range Then
Call Expression.Copy
Call rng.PasteExcelTable(False, False, False) 'als Tabelle in Word einfügen
Application.CutCopyMode = False
Else
rng.Text = CStr(Expression)
End If
Call Document.Bookmarks.Add(Name, rng)
End If
End Sub
und pack diese in ein eigenes Modul - nenn das Modul z.B. modWdBookmarks.
A c h t u n g: Das ist eine modifizierte Version; warum, kommt weiter unten.
Wenn ich das richtig interpretiere, liegen deine Daten in deinem Code in der Zeile 46-48 vor.
Das ist der Teil hier:
With Sheets("word-kopierer").Range("A:A")
.Offset(0, 0).SpecialCells(xlCellTypeVisible).Copy
End With
Anstatt mit Copy, schreib dies:
With Sheets("word-kopierer").Range("A:A")
Set rngData = .SpecialCells(xlCellTypeVisible)
End With
Das Offset(0, 0) kann man weglassen, da der Bereich mit den Argumenten 0 und 0 nicht versetzt wird.
Jetzt ruf das obige Makro auf, es fügt gegenüber der ersten Version keinen text ein, sondern den Datenbreich von Excel... als Tabelle in Word:
AlterBookmark "BookmarkName", rngData, AppWord
Falls du dich übrigens wunderst, wie ich die Datentypen von Word in Excel verwende:
Kleiner Hinweis noch:
Dim strHaupt, Dpkt, Tabmin, Tabmax, strVer As String
Macht nicht was du vermuten wirst. Bis auf strVer haben alle anderen Variablen nämlich den Datentyp Variant und nicht String.
|