Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1528to1532
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

Formatübernahme: Excel-to-Word (mit Textmarken)

Formatübernahme: Excel-to-Word (mit Textmarken)
06.12.2016 13:31:59
Dome
Guten Tag zusammen,
Zuerst einmal eine ganz grundsätzliche, konkrete Frage:
Ich habe in der Zelle A1 einen langen Text stehen (mit Umbrüchen), davon sind 2-3 Sätze FETT geschrieben. Ist es technisch überhaupt umsetzbar, dass diese Formatierung so von Excel an Word (an eine Textmarke) übergeben werden kann?
Falls ja würde ich dann mal einen Ausschnitt aus dem Code posten..
Besten Dank für Eure Einschätzungen.
Grüsse,
Dome

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Der zweite Link...
06.12.2016 15:33:58
Dome
Hi Case,
Vielen Dank für die Links, sieht auf den ersten Blick nach dem aus was ich suche.
Ich schaus mir mal an die kommenden Tage und wünsche einen schönen Abend.
Ich melde mich nochmals.
Grüsse,
Dome
AW: Der zweite Link...
07.12.2016 10:47:28
Dome
Hi Case,
Hab das mal in einfacherer Form, resp. auf meine Bedürfnisse angepasst, umgesetzt und bin zu folgendem Code gekommen:
Private Sub CommandButton1_Click()
Dim wdApp As Object ' Word.Application
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application")
On Error GoTo 0
'wdApp.ActiveDocument.Unprotect
wdApp.Visible = True
wdApp.Documents.Add "O:\test.dotx"
Tabelle4.Range("E07").Copy
wdApp.ActiveDocument.Bookmarks("Textmarke1").Range.PasteExcelTable False, False, False
Tabelle4.Range("E08").Copy
wdApp.ActiveDocument.Bookmarks("Textmarke2").Range.PasteExcelTable False, False, False
Tabelle4.Range("E09").Copy
wdApp.ActiveDocument.Bookmarks("Textmarke3").Range.PasteExcelTable False, False, False
Tabelle4.Range("E10").Copy
wdApp.ActiveDocument.Bookmarks("Textmarke4").Range.PasteExcelTable False, False, False
Tabelle4.Range("E11").Copy
wdApp.ActiveDocument.Bookmarks("Textmarke5").Range.PasteExcelTable False, False, False
Set wdApp = Nothing
End Sub
In meiner Excel-Tabelle finden sich nun einige Bausteine, weit mehr als die angegebenen Beispiele, und zwar in der Spalte E (siehe oben).
Was ich unbedingt noch benötigte ist Folgendes:
Der obige Code ist noch sehr statisch was die Auswahl der Bausteine betrifft. Nicht alle Bausteine werden jedes Mal benötigt, sondern nur eine Auswahl. Wie könnte man das am besten umsetzen? Ich habe daran gedacht in die Spalte D "x"-en Setzen zu lassen und diese dann in einer Loop abzufragen und entsprechend auszugeben.
Ist das die "beste" Lösung oder gibt es da eine schönere Alternative?
Besten Dank für Deine/Eure Einschätzungen.
Grüsse,
Dome
Anzeige
Wenn Du das...
07.12.2016 11:05:32
Case
Hallo, :-)
... sehr oft brauchst ist das mit den "ixen" eher ungünstig. Dann würde ich mir eine kleine UserForm basteln mit den Bausteinen und "CheckBoxen" - die werden ausgewählt und fertig. ;-)
Servus
Case

AW: Wenn Du das...
07.12.2016 11:29:41
Dome
Hi Case,
Sooo klein wird die UserForm dann auch wieder nicht bei ca. 40 Bausteinen. ;)
Ich hab mal den Ansatz "Word-Vorlage mit AutoText und Userform (alles in Word)" verfolgt und wieder verworfen, da nicht nur die UserForm unüberblickbar wird.
Aber Du sprichst wohl von einer in Excel programmierten UserForm, nicht?
Wie würde ich denn die einzelnen Checkboxen mit den entsprechenden Textmarken verbinden?
LG
Dome
Anzeige
"x"e...
07.12.2016 12:03:55
Michael
Hi,
die Idee finde ich gar nicht so schlecht; allerdings: wenn die Texte jeweils sehr "hoch" sind, muß man ewig scrollen, um die xe zu setzen.
Die Frage ist, ob die Namen den Textmarken sauber mit der Reihenfolge in Spalte E übereinstimmt. Wenn ja, ist die Schleife relativ simpel:
Private Sub CommandButton1_Click()
Dim z&
Dim wdApp As Object ' Word.Application
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application")
On Error GoTo 0
'wdApp.ActiveDocument.Unprotect
wdApp.Visible = True
wdApp.Documents.Add "O:\test.dotx"
For z = 7 To 11
If Tabelle4.Range("D" & z).Value = "x" Then
Tabelle4.Range("E" & z).Copy
wdApp.ActiveDocument.Bookmarks("Textmarke" & z - 6).Range.PasteExcelTable False, False,  _
False
End If
Next
Set wdApp = Nothing
End Sub

Man könnte aber auch ein weiteres Tabellenblatt anlegen, das nur für die Auswahl verwendet wird, und in dem nur jeweils die ersten z.B. 30 Zeichen des Textbausteins stehen: wenn man eine weitere Spalte mit den Textbaustein-Namen anlegt, können die auch ohne VBA vom Anwender geändert bzw. erweitert werden.
Schöne Grüße,
Michael
Anzeige
AW: "x"e...
07.12.2016 13:47:35
Dome
Guten Tag Michael,
Danke erstmals für die eingefügte Abfrage. Das gibt mir wieder einen kleinen Denkanstoss, denn die in Word festgelegten Textmarken stimmen letzten Endes nur mit der Anzahl "x"-en überein. Wenn ich also irgendwo ein "x" nicht setze, "überspringt" es mir eine Textmarke, obwohl da eigentlich was drin stehen sollte.
Ist ein Zwischenspeichern zu kompliziert? Ich könnte mir eine Lösung so vorstellen, dass Excel die mit "x" markierten Bausteine in ein anderes Tabellenblatt (zwischen-)kopiert (dann habe ich eine saubere liste, welche mit den Textmarken übereinstimmt) und diese erst in einem zweiten Schritt in die Word-Vorlage kopiert.
Die "x"-en werden übrigens aufgrund einer in Excel gebauten Abfrage gesetzt.
LG
Dome
Anzeige
AW: "x"e...
07.12.2016 14:05:32
Michael
Hi,
ein extra Blatt geht schon, aber wenn es nur darum geht, TextBoxen nach aufsteigender Nummerierung zu füllen, geht das mit einer weiteren Variablen einfacher:
Private Sub CommandButton1_Click()
Dim z&, TMz&
Dim wdApp As Object ' Word.Application
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application")
On Error GoTo 0
'wdApp.ActiveDocument.Unprotect
wdApp.Visible = True
wdApp.Documents.Add "O:\test.dotx"
TMz = 0
For z = 7 To 11
If Tabelle4.Range("D" & z).Value = "x" Then
TMz = TMz + 1
Tabelle4.Range("E" & z).Copy
wdApp.ActiveDocument.Bookmarks("Textmarke" & TMz).Range.PasteExcelTable False, _
False, False
End If
Next
Set wdApp = Nothing
End Sub

Wenn Du TMz erst zu Beginn der Schleife hochzählst, weißt Du hinterher (ohne Rechnerei), wie viele TM befüllt wurden - falls das interessant sein sollte.
Es läuft ja doch darauf hinaus, daß nicht alle gefüllt werden, wenn nicht alle Einträge angeixt werden.
Schöne Grüße,
Michael
Anzeige
AW: "x"e...
07.12.2016 15:00:31
Dome
Hallo Michael,
Hach, das funktioniert einfach nur perfekt, vielen vielen Dank für Deine wertvollen Inputs. Du hast mir sehr geholfen.
Jetzt werde ich mir noch eine kleine UserForm zusammenbasteln, um die "x"-en zu setzen, dann kann ich mich wieder dem Leben draussen widmen. ;)
Einen schönen Tag weiterhin..
Beste Grüsse,
Dome
freut mich, und...
07.12.2016 18:59:33
Michael
Hi Dome,
ach, die Daten erst in eine UF laden und dann wieder schreiben...
Ich mach mir dann "immer" ein Event-Makro, das nur in der betreffenden Spalte gilt und z.B. bei Doppelklick x setzt bzw. löscht:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Count  1 Then Exit Sub
If Target.Column = 4 Then
If Target.Value = "x" Then Target.Value = "" Else Target.Value = "x"
Cancel = True
End If
End If
End Sub

Happy Exceling,
Michael
Anzeige
Irgendwie..
09.12.2016 12:14:04
Dome
..funktioniert das doch noch nicht so Recht, und zwar weil ich eine Variante noch nicht durchgespielt habe:
Vielleicht kannst Du Dir mal kurz meine Test-Dokumente anschauen und mit weiterhelfen...?
Ganz herzlichen Dank!
Beste Grüsse,
Dome
https://www.herber.de/bbs/user/109955.xlsm
https://www.herber.de/bbs/user/109956.doc
.doc müsste noch in eine Vorlage umgewandelt werden. Upload war leider nicht anders möglich.. sorry
Lasse offen owT
09.12.2016 13:54:21
Dome
AW: Lasse offen owT
09.12.2016 20:57:56
Michael
Hi Dome,
meine Logik war eine andere, nämlich die Testmarken schlicht weiterzuzählen; wenn Du welche überspringen willst -und sie sowieso in der Tabelle hinterlegt hast- , sieht der Fall etwas anders aus:
Private Sub CommandButton2_Click()
Dim z&, TM$ ' & = as long, $ = as String
Dim wdApp As Object
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application")
On Error GoTo 0
wdApp.Visible = True
wdApp.Documents.Add "O:\group\Private Vorsorge\PE&M\Produktentwicklung\11-Credit Life\test. _
dotx"
For z = 1 To 15
' Textmarke wird nur dann aus Spalte C übernommen, wenn nicht leer
' und dann so lange verwendet, bis die nächste vorhanden ist.
If Tabelle1.Range("C" & z).Value  "" Then TM = Tabelle1.Range("C" & z).Value
If Tabelle1.Range("F" & z).Value = "x" Then
If TM  "" Then
Tabelle1.Range("G" & z).Copy
wdApp.ActiveDocument.Bookmarks(TM).Range.PasteExcelTable False, False, False
Else
MsgBox "Textmarke = leer; Fehler in Zeile " & z
End If
End If
Next
Set wdApp = Nothing
End Sub

Ausprobiert hab ich's nicht, weil das immer ein Gefummel mit den dotx bzw. dem Pfad ist; ich denke, es paßt so.
Gruß,
M.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige