Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA / Richtige Werte erst im 2ten Durchlauf

Forumthread: VBA / Richtige Werte erst im 2ten Durchlauf

VBA / Richtige Werte erst im 2ten Durchlauf
18.01.2025 21:38:36
Frank
Das VBA-Makro (mittels CommandButton) gibt beim ersten Durchlauf nicht die erwarteten Werte aus. Stattdessen erscheinen die korrekten Werte erst beim zweiten Durchlauf. Der Code liest Werte aus bestimmten Zellen aus und verarbeitet sie, jedoch scheinen die Werte im ersten Durchlauf nicht richtig geladen oder aktualisiert zu werden.
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA / Richtige Werte erst im 2ten Durchlauf
18.01.2025 21:46:41
Frank
Der VBA-Befehl lautet:

Private Sub AngebotWordErstellen_Click()
Dim WordApp As Object
Dim WordDoc As Object
Dim Paragraph As Object
Dim wsKonfig As Worksheet
Dim wsUserf As Worksheet


' Arbeitsblatt zuweisen
Set wsKonfig = ThisWorkbook.Sheets("Konfiguration")
Set wsUserf = ThisWorkbook.Sheets("10 Userformen")

' Word-Anwendung initialisieren
On Error Resume Next
Set WordApp = GetObject(, "Word.Application") ' Prüfen, ob Word bereits läuft
If Err.Number > 0 Then
Set WordApp = CreateObject("Word.Application") ' Word starten, falls es nicht läuft
End If
On Error GoTo 0


' 1. Neues Word-Dokument erstellen und anzeigen
Set WordDoc = WordApp.Documents.Add
WordApp.Visible = True


' 2. Füge 5 Leerzeilen vor dem ersten Zeileneintrag ein
Set Paragraph = WordDoc.Content.Paragraphs.Add 'Befehl muss stehen bleiben
Paragraph.Range.text = vbCrLf & vbCrLf ' Anschrift startet nach 2 Leerzeilen
Paragraph.Alignment = 0 ' Links ausrichten
Paragraph.Format.LeftIndent = WordApp.CentimetersToPoints(0) ' Kein Einzug
Paragraph.SpaceAfter = WordApp.CentimetersToPoints(0#) ' Zeilenabstand



' 3. Kundenanschrift
WordDoc.Content.Font.Name = "Arial"
WordDoc.Content.Font.Size = 10
WordDoc.Content.Font.Spacing = 0

Set Paragraph = WordDoc.Content.Paragraphs.Add
Paragraph.Range.text = UserForm1.TextBox1.text & vbCrLf & _
UserForm1.TextBox2.text & vbCrLf & _
UserForm1.TextBox3.text & " " & UserForm1.TextBox31.text & vbCrLf & _
UserForm1.TextBox4.text & " " & UserForm1.TextBox7.text & vbCrLf & _
(IIf(UserForm1.TextBox29.text > "", vbCrLf & UserForm1.TextBox29.text, "")) & vbCrLf & _
UserForm1.TextBoxDummy.text ' Dummy-Position muss bleiben




' 4. Datum
Paragraph.Range.Font.Bold = False ' Position steht für Datum Fett oder Normal
Paragraph.Alignment = 2 ' Rechts ausrichten
Paragraph.Format.LeftIndent = WordApp.CentimetersToPoints(0) ' Einzug von links
' Paragraph.SpaceAfter = WordApp.CentimetersToPoints(0.2)
Paragraph.SpaceAfter = WordApp.CentimetersToPoints(0#)

Paragraph.Range.Font.Name = "Arial"
Paragraph.Range.Font.Size = 10
Paragraph.Range.Font.Spacing = 0

Set Paragraph = WordDoc.Content.Paragraphs.Add
Paragraph.Range.text = "Datum: " & Format(Date, "dd.mm.yyyy") & vbCrLf & _
vbCrLf & _
UserForm1.TextBoxDummy.text ' Dummy-Position muss bleiben



' 5. Angebots-Nummer
Paragraph.Range.Font.Bold = True ' Position steht für Datum Fett oder Normal
Paragraph.Alignment = 0 ' Links ausrichten
Paragraph.Format.LeftIndent = WordApp.CentimetersToPoints(0) ' Einzug von links
' Paragraph.SpaceAfter = WordApp.CentimetersToPoints(0.2)
Paragraph.SpaceAfter = WordApp.CentimetersToPoints(0#)
Paragraph.Range.Font.Name = "Arial"
Paragraph.Range.Font.Size = 12
Paragraph.Range.Font.Spacing = 0

Set Paragraph = WordDoc.Content.Paragraphs.Add
Paragraph.Range.text = "ANGEBOT " & Format(Now, "yyyymmdd_hhmm") & vbCrLf & _
vbCrLf & _
UserForm1.TextBoxDummy.text

' Dummy-Position muss bleiben


' 6. Kommission
Paragraph.Range.Font.Bold = False
Paragraph.Alignment = 0 ' Links ausrichten
Paragraph.Format.LeftIndent = WordApp.CentimetersToPoints(0) ' Einzug von links
Paragraph.SpaceAfter = WordApp.CentimetersToPoints(0.2)
Paragraph.Range.Font.Name = "Arial"
Paragraph.Range.Font.Size = 10
Paragraph.Range.Font.Spacing = 0

Set Paragraph = WordDoc.Content.Paragraphs.Add

' Überprüfung, ob Checkbox9 aktiviert ist
If UserForm1.CheckBox9.value = True Then
Paragraph.Range.text = "Kommission: " & wsKonfig.Range("U18").value & vbCrLf & _
UserForm1.TextBoxDummy.text ' Dummy-Position muss bleiben
Else
' Wenn Checkbox9 nicht aktiviert ist, bleibt der Text leer
' Paragraph.Range.text = ""
Paragraph.Range.text = vbCrLf
End If


' 7. Vortext zur Leistungsbeschreibung
Paragraph.Range.Font.Bold = False
Paragraph.Alignment = 0 ' Links ausrichten
Paragraph.Format.LeftIndent = WordApp.CentimetersToPoints(0) ' Einzug von links
' Paragraph.SpaceAfter = WordApp.CentimetersToPoints(0.2)
Paragraph.SpaceAfter = WordApp.CentimetersToPoints(0#)
Paragraph.Range.Font.Name = "Arial"
Paragraph.Range.Font.Size = 8
Paragraph.Range.Font.Spacing = 0

Set Paragraph = WordDoc.Content.Paragraphs.Add
Paragraph.Range.text = "Leistungsbeschreibung:" & vbCrLf & _
UserForm1.TextBoxDummy.text ' Dummy-Position muss bleiben



' 8. Leistungsbeschreibung - Inhalt
Set Paragraph = WordDoc.Content.Paragraphs.Add
With Paragraph
.Range.Font.Bold = False
.Alignment = 0 ' Links ausrichten
.Format.LeftIndent = WordApp.CentimetersToPoints(0) ' Einzug von links
.SpaceAfter = WordApp.CentimetersToPoints(0)
.Range.Font.Name = "Arial"
.Range.Font.Size = 8
.Range.Font.Spacing = 0
End With

' Wert/Text in Zellen anpassen (Mehrpreis, Aktionsfarbe)
If InStr(1, wsUserf.Range("U31").value, "Mehrpreis, ", vbTextCompare) > 0 Then
wsUserf.Range("U31").value = Replace(wsUserf.Range("U31").value, "Mehrpreis, ", "")
End If
If InStr(1, wsUserf.Range("U33").value, "Mehrpreis, ", vbTextCompare) > 0 Then
wsUserf.Range("U33").value = Replace(wsUserf.Range("U33").value, "Mehrpreis, ", "")
End If
If InStr(1, wsUserf.Range("U33").value, "Aktionsfarbe, ", vbTextCompare) > 0 Then
wsUserf.Range("U33").value = Replace(wsUserf.Range("U33").value, "Aktionsfarbe, ", "")
End If



' Variablen zur Zwischenspeicherung von Texten
Dim textN39 As String
Dim paragraphText As String

' Text für das Paragraph-Objekt vorbereiten, ohne leere Zeilen einzufügen
paragraphText = wsUserf.Range("M23").value & " " & wsUserf.Range("N23").value & vbCrLf & _
wsUserf.Range("M25").value & " " & wsUserf.Range("N25").value & vbCrLf & _
wsUserf.Range("M27").value & " " & wsUserf.Range("N27").value & vbCrLf & _
wsUserf.Range("M29").value & " " & wsUserf.Range("N29").value & vbCrLf & _
wsUserf.Range("M31").value & " " & wsUserf.Range("N31").value & vbCrLf & _
wsUserf.Range("M33").value & " " & _
"Innen " & " " & wsKonfig.Range("AA35").value & ", " & _
"Außen " & " " & wsKonfig.Range("AO35").value & vbCrLf & _
wsUserf.Range("M37").value & " " & wsUserf.Range("N37").value

' Überprüfen, ob der Wert in Zelle N39 "Ohne" ist
If Trim(wsUserf.Range("N39").value) > "Ohne" Then
' Text hinzufügen, wenn N39 nicht "Ohne" ist
paragraphText = paragraphText & vbCrLf & wsUserf.Range("M39").value & " es klappt " & wsUserf.Range("N39").value
End If

' Weiteren Text anhängen
paragraphText = paragraphText & vbCrLf & _
wsUserf.Range("M43").value & " " & wsUserf.Range("N43").value & vbCrLf & _
UserForm1.TextBoxDummy.text ' Position steht als Dummy, Position muss stehen bleiben.

' Text dem Paragraph-Objekt zuweisen
Paragraph.Range.text = paragraphText


' Schließe die UserForm
Unload UserForm1

' Word-Dokument vor allen anderen Anwendungen anzeigen
WordApp.Activate
End Sub

Anzeige
AW: VBA / Richtige Werte erst im 2ten Durchlauf
18.01.2025 22:06:31
Frank
Hallo liebe Community,

im Eifer des Geschehens habe ich leider versäumt, mich vorab vorzustellen. Seit einiger Zeit beschäftige ich mich in meiner Freizeit damit, verschiedene Unternehmensprozesse zu vereinfachen. Falls jemand in der Lage ist, dieses Problem zu lösen, würde ich mich sehr über eure Unterstützung freuen.

Entschuldigt bitte mein Versehen!
Beste Grüße
Frank
Anzeige
AW: VBA / Richtige Werte erst im 2ten Durchlauf
19.01.2025 02:01:42
ralf_b
Sind alle Werte falsch oder nur die aus den Zellen oder nur die aus der Userform?
Der Code ist ungeeignet um dir hierauf etwas zu antworten. Man kann hier nicht erkennen welche Werte sich im ersten Durchlauf in den Objekten befinden oder auch nicht.
Entweder du zeigst uns noch Beispieldateien wo der Fehler nachvollziehbar ist oder du mußt dir das beim Debuggen mit Haltepunkten, Lokalfenster, Debugausgaben im Direktfenster selbst herausfinden.
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18