MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Word
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 16.04.2019, 07:47   #1
Niiidro
Neuer Benutzer
Neuer Benutzer
Standard VBA - IF Abfrage funktioniert nicht wie gewollt.

Hallo Zusammen.

Ich habe im Angehängten Dokument eine grössere IF-Verschachtelung, welche die diversen Comboboxen und Textfelder auf Inhalt überprüfen soll. Jedoch soll, falls ein Feld leer ist, der Text nicht rüber exportieren. Habt ihr eine Idee was ich falsch mache?

LG Niiidro

Code:

Option Explicit

Private Sub cmdErstellen_Click()

Dim lngZaehler As Long
Dim blnSelected As Boolean
Dim pStr As String
Dim bmRange As Word.Range
Dim i As Integer

If cboDD = "" Then
    MsgBox "Tag auswählen", 0, "Fehler"
    Else
    If cboMM = "" Then
        MsgBox "Monat auswählen", 0, "Fehler"
        Else
        If cboVerantwortlicher = "" Then
            MsgBox "Verantwortlicher auswählen", 0, "Fehler"
            Else
            If cboH = "" Then
                MsgBox "Stunde auswählen", 0, "Fehler"
                Else
                If cboM = "" Then
                    MsgBox "Minute auswählen", 0, "Fehler"
                    Else
                    If cboOrt = "" Then
                        MsgBox "Ort auswählen", 0, "Fehler"
                        Else
                        If txtVorbereitung = "" Then
                            If MsgBox("Sicher das nichts vorbereitet werden muss?", 4, "Frage") = vbNo Then
                                MsgBox "Bitte Vorbereitung eintragen!", 0, "Hinweis"
                                Else
                            End If
                        Else
                        If HatAuswahl(lboLeiter) Then
                            MsgBox "Mind. 1 Leiter muss ausgewählt werden!"
                            Else
                            GoTo Transport
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If
End If

Transport:

Set bmRange = ActiveDocument.Bookmarks("bmDatum").Range
bmRange.Text = Me.cboDD.value & "." & Me.cboMM.value & "." & Me.cboYY.value

Set bmRange = ActiveDocument.Bookmarks("bmVerantwortlicher").Range
bmRange.Text = Me.cboVerantwortlicher.value

Set bmRange = ActiveDocument.Bookmarks("bmZeit").Range
bmRange.Text = Me.cboH.value & ":" & Me.cboM.value
                    
Set bmRange = ActiveDocument.Bookmarks("bmOrt").Range
bmRange.Text = Me.cboOrt.value

Set bmRange = ActiveDocument.Bookmarks("bmVorbereitung").Range
bmRange.Text = Me.txtVorbereitung.value

With lboLeiter
For i = 0 To lboLeiter.ListCount - 1
If lboLeiter.Selected(i) = True Then
pStr = pStr & ", " & lboLeiter.List(i)
End If
Next i
End With
                    
Set bmRange = ActiveDocument.Bookmarks("bmLeiter").Range
bmRange = pStr

End Sub
Angehängte Dateien
Dateityp: dotm uebung.dotm (44,7 KB, 2x aufgerufen)
Niiidro ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.04.2019, 10:19   #2
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Niidro,

wenn du möchtest, dass die Übertragung erst stattfindet, wenn alle zu prüfenden Felder gefüllt sind, könntest du sie jeweils einzeln prüfen und eine Zählvariable übergeben, in Abhängigkeit von der das Makro abgebrochen oder fortgesetzt wird. Ein wenig ins Unreine geschrieben z.B. so:
Code:

Private Sub cmdErstellen_Click()
Dim feld As String
Dim zaehler As Long

If cboDD = "" Then
    feld = feld & "Tag, "
    zaehler = zaehler + 1
End If

If cboMM = "" Then
    feld = feld & "Monat "
    zaehler = zaehler + 1
End If
'usw mit allen zu prüfenden Feldern

'danach Summarische Prüfung
If zaehler > 0 Then
    MsgBox "Eintrag in den Feldern " & feld & " fehlt!"
Else
 MsgBox "Passt."
 'Weiter mit dem Makro
End If

End Sub

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.04.2019, 11:28   #3
Niiidro
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Gerhard.

Das Funktioniert perfekt und löst mein Problem!

Vielen Dank.

LG Niiidro
Niiidro ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.04.2019, 14:04   #4
Niiidro
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Habs noch ein bisschen angepasst, so das es mir besser gefällt. Es geht um dieses Codestück:
Code:

If txtVorbereitung = "" Then
                            feld = feld & ""
                            zaehler = zaehler + 1
                        End If
                        If zaehler > 0 Then
                            If MsgBox("Sicher das nichts vorbereitet werden muss?", 4, "Frage") = vbNo Then
                                MsgBox "Bitte Vorbereitung eintragen!", 0, "Hinweis"
                                Else
                                If HatAuswahl(lboLeiter) Then
                                    zaehler = zaehler + 1
                                End If
                                If zaehler > 0 Then
                                   MsgBox "Mind. 1 Zusätlicher Leiter muss ausgewählt werden.", vbCritical, "Fehler"
                                   Else
Wenn Text im Feld Vorbereitung eingetragen ist, wird nichts eingetragen und keine Meldung kommt.
Wenn kein Text eingetragen ist, kommen alle Meldungen inkl. die Meldung "Mind. 1 Zusätzlicher Leiter muss ausgewählt werden." <-- Diese kommt auch, selbst wenn ich in der lboLeiter Listbox mehrere Namen ausgewählt habe.

Wo ist der Fehler?

LG Niiidro
Angehängte Dateien
Dateityp: dotm uebung.dotm (42,9 KB, 0x aufgerufen)
Niiidro ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.04.2019, 15:20   #5
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Niidro,

erstens versteh ich nicht, wieso du das Feld "Weitere Leiter" in Abhängigkeit vom Feld "Vorbereitung" prüfen willst. Ist das wirklich so beabsichtigt?

Zweitens hast du meiner Meinung nach die Function HatAuswahl falschrum gepolt: Sie gibt False aus und erhöht den Zähler, wenn mindestens ein weiterer Leiter ausgewählt wurde. Sie sollte in diesem Fall doch auf dem alten Stand bleiben.

Ich würde die Sache (auch ein wenig aufgehübscht) also so gestalten:

GobaleModule:
Code:

Public Function HatAuswahl(lboLeiter As Control) As Boolean
Dim i As Long
For i = 0 To lboLeiter.ListCount - 1
   If lboLeiter.Selected(i) Then
       HatAuswahl = True
       Exit Function
   End If
Next
HatAuswahl = False
End Function
Userform:
Code:

Private Sub CmdErstellen_Click()
Dim feld As String
Dim zaehler As Long

If cboDD = "" Then
    
    feld = feld & "Tag" & vbLf
    zaehler = zaehler + 1
End If

If cboMM = "" Then
    feld = feld & "Monat" & vbLf
    zaehler = zaehler + 1
End If

'usw mit allen zu prüfenden Feldern

'jetzt txtVorbereitung mit einer speziellen Behandlung
If txtVorbereitung = "" Then
    If MsgBox("Sicher das nichts vorbereitet werden muss?", 4, "Frage") = vbNo Then
        MsgBox "Bitte Vorbereitung eintragen!", 0, "Hinweis"
        Exit Sub
    End If
End If

'dann noch die Prüfung des Listenfelds
If HatAuswahl(lboLeiter) = False Then
    feld = feld & "Weitere Leiter" & vbLf
    zaehler = zaehler + 1
End If

If zaehler > 0 Then
    MsgBox "Eintrag bzw. Auswahl in den Feldern" & vbLf & vbLf & feld & vbLf & "fehlt!"
Else
 MsgBox "Passt."
 'Weiter mit dem Makro
End If

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.04.2019, 15:45   #6
Niiidro
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Gerhard.

Mein Ziel war, das ich jeweils nur eine Fehlermeldung bzw ein Leeres Feld als Meldung kriege, deswegen auch diese Verschachtelung.
Bei den Leitern ist es so, das ich prüfen will ob mind. Einer angewählt ist, Wenn keiner Ausgewählt ist, soll er die Fehlermeldung bringen, wenn mind Einer Ausgewählt ist, soll er den Code weiterführen.

Werde deine Lösung noch ausprobieren.

LG Niiidro
Niiidro ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.