Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Übergabe von Excel an Word - ungenutzte Textmarken sollen keine Leerzeilen sein
#1
Hallo Liebe Excel Freunde :) 

Ich bin VBA Anfänger 
Version: Office 365

ich möchte mit Excel eine Word Vorlage füllen und stoße dabei auf 2 kleine Problemchen, bei denen ihr mir hoffentlich helfen könnt.  
Ich bin mir nicht sicher ob das Problem an der Word Vorlage liegt oder ich in Excel in den VBA Code etwas einbauen kann. 

Ich habe euch die Word Vorlage mal angehängt.  Unten findet ihr noch den Code, den ich zum Übertragen nutze. 


1. Ich benötige nicht immer alle Textmarken. Leider bleiben auch bei nicht benötigen, die ganzen Leerzeilen in dem erstellten Word Dokument. 

So sind meine Textmarken gesetzt:

Text 1
Leerzeile
Text 2
Leerzeile
Text 3
Leerzeile

Wenn ich jetzt für Text 2 keinen Wert habe sieht es aktuell wie folgt aus: 
Text 1
Leerzeile
Leerzeile
Leerzeile
Text 3
Leerzeile

Was ich möchte wie es aussieht
Text1
Leerzeile
Text 3
Leerzeile

Ich habe schon versucht die Textmarken anders zu setzen, aber ohne Erfolg. Da ich die Textmarken in Word das erste mal so nutze, bin ich mir nicht sicher ob man die anders Setzen könnte. Vielleicht gibt es dazu aber auch eine VBA Lösung. 


2. Die Tabelle in der Word Vorlage kann mal nur eine Zeile beinhalten und mal 5 oder 6.  Die Größe der Tabelle in dem erstellten Word Dokument soll natürlich den Zeilen mit Inhalt entsprechen. 
Leider reicht dafür meine VBA Kenntnis überhaupt nicht aus. 

Code:
Private Sub Übertrag_Click()

Dim appWord As Object
Dim Vorlage As Object

Set appWord = CreateObject("Word.Application")
Set Vorlage = appWord.Documents.Add("C:xxxxx.docx")

appWord.Visible = True

Vorlage.Activate

Vorlage.Bookmarks("Art").Range.Text = Range("C1")
Vorlage.Bookmarks("Einleitung").Range.Text = Range("A18")
Vorlage.Bookmarks("Unterzeichner2").Range.Text = Range("C38")

Set Vorlage = Nothing
Set appWord = Nothing

End Sub


Vielen Dank schon mal im Voraus.


Angehängte Dateien Thumbnail(s)
   

.docx   Vorlage.docx (Größe: 74,58 KB / Downloads: 1)
Antworten Top
#2
Verzichte auf 'Bookmarks'
Benütze 'Docvariables'.

Code:
Private Sub Übertrag_Click()
  sn = Sheet1.range("A1:C38")

  with getobject("C:\beispiel.docx")
    .variables("Art") = sn(1,3)
    .variables("Einleiter") = sn(18,1)
    .variables("Unterzeichner2") = sn(38,3)
    for each it in .storyranges
      it.fields.update
    next
    .save
    .close 0
  end with
End Sub


Angehängte Dateien
.docx   __Beispiel_snb.docx (Größe: 79,82 KB / Downloads: 2)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#3
Hallo snb, 

vielen Dank für deine Schnelle Antwort. 
Ich habe deinen Code ein bisschen auf mich angepasst.

Ich musste mich in DocVariable ein bisschen einlesen. 

Wenn kein Text vorhanden ist zum übertragen kommt leider in dem erstellten Word Dokument die Fehlermeldung "Fehler! Keine Dokumentvariable verfügbar."
Das Problem mit den Leerzeilen ist dann immer noch da. Word habe ich noch weniger Ahnung als Excel :D 
Ist bestimmt über Feldfunktionen in Word zu lösen. Ich versuche nebenbei mal weiter zu Googeln. 




Code:
With Vorlage 
.variables("Text_Hinweis") = Range("A27")
.variables("Text_Softwarepflege") = Range("A29")
.variables("Text_AGB") = Range("A31")
.variables("Text_beiAngebot") = Range("A33")
.variables("Ende") = Range("A35")

For Each it In .storyranges
      it.Fields.Update
    Next

End With


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#4
Verzichte auf sinnlose Variablen (wie 'Vorlage').

Code:
Private Sub Übertrag_Click()
  sn = Sheet1.range("A1:C38")

  with getobject("C:\beispiel.docx")
    .variables("Art") = iif(sn(1,3)=""," ",sn(j,3))
    .variables("Einleiter") = iif(sn(18,1)=""," ",sn(18,1))
    .variables("Unterzeichner2") = iif(sn(38,3)=""," ",sn(38,3))

    for each it in .storyranges
      it.fields.update
    next

    .close -1
  end with
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
Nochmals danke snb,

Die Variable Vorlage hat mittlerweile ihren Sinn :)

So, jetzt bin ich ca bei dem Stand wie mit den Textmarken. 

Wie auf dem Bild zu sehen ist, habe ich nun zwischen Text 1 und Text 5 insgesamt 7 Leerzeilen. Ziel ist eine Leerzeile.  
4 Leerzeilen verursache ich schon so in der Vorlage.


Angehängte Dateien Thumbnail(s)
       
Antworten Top
#6
Ich habe versucht in Word das Volgendermaßen zu schreiben, Funktioniert leider nur nicht, Damit verschwinden zwar die ganzen Leerzeilen, aber ich bekomme die auch nicht mehr, wenn Text da ist


Code:
{ Docvariable "Text_Hinweis" \f "

"}{Docvariable "Text_Softwarepflege" \f "

"}
Antworten Top
#7
Ok, 

mit den Leerzeilen komme ich nun zurecht 

Word 
Code:
{ Docvariable "Text_Hinweis" \f ""}{Docvariable "Text_Softwarepflege" \f ""}

Excel
Code:
.variables("Text_Hinweis") = IIf(Range("A27") = "", " ", Range("A27"))
.variables("Text_Softwarepflege") = IIf(Range("A29") = "", " ", Chr(13) & Chr(13) & Range("A29"))
.variables("Text_AGB") = IIf(Range("A31") = "", " ", Chr(13) & Chr(13) & Range("A31"))
.variables("Text_beiAngebot") = IIf(Range("A33") = "", " ", Chr(13) & Chr(13) & Range("A33"))
.variables("Ende") = IIf(Range("A35") = "", " ", Chr(13) & Chr(13) & Range("A35"))


Jetzt muss ich nur noch gucken, wie ich das mit der Tabelle in dem Word Dokument hin bekomme. 

Die Tabelle kann ja zwischen 1 und 6 Zeilen haben. Es soll natürlich nur entsprechende Zeilen, die auch einen Inhalt haben angezeigt werden
Antworten Top
#8
Zitat:Die Variable Vorlage hat mittlerweile ihren Sinn :)
Eine Behauptung ohne Argumente.
Das ist tautologisch (oder Petitio Principii)

{IF { Docvariable "Text_Hinweis" }=" " "" { Docvariable "Text_Hinweis" }
}
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#9
So, wie ich die Tabelle in Word anspreche und auch erweitere, habe ich auch raus gefunden.

Code:
.Tables(1).Rows.Add
.Tables(1).Cell(3, 1).Range.Text = Range("A22")


Jetzt bin ich aber auf 2 neue Problemchen gestoßen. 

Das Format beim Übertragen. 

Währung wird wie folgt übertragen ####  (1234)
und soll aber so aussehen  #.###,##  (1.234,00)
Der Code für die Übertragung von der Währung
Code:
.Tables(1).Cell(3, 1).Range.Text = Range("A22")

Das Datum wird mit dem Format  28.02.2021 übertragen soll aber 28. Februar 2021 sein
Der Code für die Übertragung des Datums
Für das Datum könnte ich auch eine Variable verwenden statt eine Textmarke. Meine versuche über die Feldfunktion das Format Festzulegen hat auch nicht geklappt.

Code:
.Bookmarks("Datum").Range.Text = Range("G4")
Antworten Top
#10
Benütze DocVariables.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste