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.

Doppelte If-Abfrage
#1
Question 
hi,

ich möchte eine doppelte If-Abfrage durchführen:

1. If Worksheets("Calc3").Range("C106") = 1 Then
2. Und wenn sie WAHR ist, dann soll der Code von For bis Exit For ausgeführt werden.
3. Im Umkehrschluß, soll wenn Range("C106") nicht 1 ist, eine MsgBox ausgegben werden: "Exportieren erst möglich, wenn genau 1ne Gruppe angegeben wird!"
4. Wenn die 1. If-Abfrage WAHR ist & die For bis Exit nicht zu weiter: springt, dann soll Next ausgeführt werden, also MsgBox "Ich bin im Next"

Variante 1:
Code:
Sub Erstellen()
Dim vorherWorkbook As Workbook
ActiveWorkbook.Save
If Worksheets("Calc3").Range("C106") = 1 Then
    For Each x In Workbooks
    If x.Name = Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" Then
        MsgBox "Datei ist noch geöffnet! Bitte die Datei: " & Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" & " schließen & erneut probieren!"
        GoTo weiter
        Exit For
    End If
If Worksheets("Calc3").Range("C106") = 0 Then
    MsgBox "Exportieren erst möglich, wenn genau 1ne Gruppe angegeben wird!"
Exit Sub
End If
Next
 MsgBox "Ich bin im Next"
weiter:
End If
End Sub
Hier gibt es keine Fehlermeldung wenn C106 0 ist, jedoch taucht auch keine Messagebox auf. Nur ActiveWorkbook.Save wird ausgeführt.

Variante 2:
Code:
Sub Erstellen()
Dim vorherWorkbook As Workbook
ActiveWorkbook.Save
If Worksheets("Calc3").Range("C106") = 1 Then
    For Each x In Workbooks
    If x.Name = Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" Then
        MsgBox "Datei ist noch geöffnet! Bitte die Datei: " & Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" & " schließen & erneut probieren!"
        GoTo weiter
        Exit For
    Else
        If Worksheets("Calc3").Range("C106") = 0 Then
        MsgBox "Exportieren erst möglich, wenn genau 1ne Gruppe angegeben wird!"
        Exit Sub
    End If
End If
Next
MsgBox "Ich bin im Next"
End If
weiter:
End Sub
Hier gibt es keine Fehlermeldung wenn C106 0 ist, jedoch taucht auch keine Messagebox auf. Nur ActiveWorkbook.Save wird ausgeführt.

Variante 3:
Code:
Sub Erstellen()
Dim vorherWorkbook As Workbook
ActiveWorkbook.Save
If Worksheets("Calc3").Range("C106") = 1 Then
    For Each x In Workbooks
    If x.Name = Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" Then
        MsgBox "Datei ist noch geöffnet! Bitte die Datei: " & Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" & " schließen & erneut probieren!"
        GoTo weiter
        Exit For
    Else
        MsgBox "Exportieren erst möglich, wenn genau 1ne Gruppe angegeben wird!"
        Exit Sub
End If
Next
 MsgBox "Ich bin im Next"
End If
weiter:
End Sub
Hier gibt es keine Fehlermeldung wenn C106 0 ist, jedoch taucht auch keine Messagebox auf. Nur ActiveWorkbook.Save wird ausgeführt.

Variante 4:
Code:
Dim vorherWorkbook As Workbook
ActiveWorkbook.Save
If Worksheets("Calc3").Range("C106") = 1 Then
   For Each x In Workbooks
   If x.Name = Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" Then
       MsgBox "Datei ist noch geöffnet! Bitte die Datei: " & Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" & " schließen & erneut probieren!"
       GoTo weiter
       Exit For
   End If
End If
       If Worksheets("Calc3").Range("C106") = 0 Then
       MsgBox "Exportieren erst möglich, wenn genau 1ne Gruppe angegeben wird!"
       Exit Sub
       End If
Next
MsgBox "Ich bin im Next"
weiter:
End Sub
Hier kommt in gelb markiert die 1. Zeile des Codes und folgende Fehlermeldung: Fehler beim Kompilieren. If-Block ohne End-If.

Theoretisch muß das VBA doch irgendwie können. Der Fehler liegt sicherlich bei mir. Nur wo? Variante 3 sollte meiner Meinung nach am nahesten an der Lösung sein.

lieben Dank

Julia :)
Antworten Top
#2
Hallo Julia,

vielleicht so?
Code:
Sub Erstellen()
  Dim vorherWorkbook As Workbook
  ActiveWorkbook.Save
  If Worksheets("Calc3").Range("C106") = 1 Then
     For Each x In Workbooks
        If x.Name = Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" Then
           MsgBox "Datei ist noch geöffnet! Bitte die Datei: " & Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" & " schließen & erneut probieren!"
           Exit For
        End If
     Next
  Else
     MsgBox "Exportieren erst möglich, wenn genau 1ne Gruppe angegeben wird!"
  End If
End Sub

Nachtrag: Du kannst übrigens den Code auch im Einzelschrittmodus durchlaufen lassen. Setze hierzu den Cursor in den Code und drücke die F8-Taste. Jetzt bist du im Einzelschrittmodus und kannst durch weiteres Drücken der F8-Taste sehen, wie deine Codes abgearbeitet werden.
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • o0Julia0o
Antworten Top
#3
Hallo Julia

von der Logik her müsste der untere korrigierte Code Laufen.  Zurt Variante 4 mit Fehlermeldung:  der Fehler ist die doppelte End If Anweisung in der For Next Schleife.  Begründung:  Du hast das 1. If Then vor For Next stehen, dann musst du diese If Anweisung aber auch bitte korrekt abschliessen, indem das -End If- hinter Next gehört!

In meinem Code findest du Else deaktiviert, weil du sowohl über Else, wie auch über Elseİf auswerten kannst.  Wo liegt der kleine, aber feine Unterschied?? Bei Else führt jeder andere Wert ausser der 1 zum Aufruf der MsgBox, Bei ElseIf führt nur exakt die 0 zum Aufruf!  Würde dort 2,3,4 stehen erfolgte kein Aufruf. Das ist ein klarerr Unterschied, und Excel ist in diesen Details sehr penibel! Ich hoffe ich konnte dir weiterhelfen.

mfg  GaST 123
Code:
Sub Erstellen_Neu()
Dim vorherWorkbook As Workbook
ActiveWorkbook.Save
If Worksheets("Calc3").Range("C106") = 1 Then
   For Each x In Workbooks
   If x.Name = Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" Then
       MsgBox "Datei ist noch geöffnet! Bitte die Datei: " & Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" & " schließen & erneut probieren!"
       Exit For
   End If
   Next x
'Else oder Elseİf Auswertung:
ElseIf Worksheets("Calc3").Range("C106") = 0 Then
   MsgBox "Exportieren erst möglich, wenn genau e1ne Gruppe angegeben wird!"
End If
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • o0Julia0o
Antworten Top
#4
danke euch sehr. Das funktioniert:

Code:
Sub ErstellenZ()
Dim vorherWorkbook As Workbook
ActiveWorkbook.Save
  If Worksheets("Calc3").Range("C106") = 1 Then
     For Each x In Workbooks
        If x.Name = Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" Then
           MsgBox "Datei ist noch geöffnet! Bitte die Datei: " & Worksheets("Calc3").Range("B109").Value & "Z" & ".xlsm" & " schließen & erneut probieren!"
           GoTo weiter
           Exit For
        End If
     Next
  Else
MsgBox "Exportieren erst möglich, wenn genau 1ne Klasse angegeben wird!"
Exit Sub
End If
MsgBox "ganz unten"

weiter:
End Sub

Alles außer 1 war mir noch lieber, wobei das Feld C106 nur 0 oder 1 sein kann. Jedoch, bei #NV - wäre ich dann auch auf der sicheren Seite.
Antworten Top


Gehe zu:


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