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

IF - Anweisung verschachteln

IF - Anweisung verschachteln
Bernd
Guten Morgen,
man lernt nie aus. Deswegen wüsste ich gerne, ob man die folgende Prozedur noch verbessern kann. Mir geht es dabei hauptsächlich um die weitere Verschachtelung der IF-Anweisungen. Aber nur wenn es auch Sinn macht.
Meine Versuche in dieser Richtung haben nicht so richtig funktioniert. Die Prozedur ist nur ein Teil des gesamten Makros
Sub BJV()
Dim y1$
' Festlegung des Berechnungsjahres als Variable y1
Berechnungsjahr1:
y1 = Application.InputBox("Bitte geben Sie das Berechnungsjahr ein!" & _
Chr(10) & "- immer vierstellig, zum Beispiel 2008 -" & _
Chr(10) & "" & Chr(10) & _
"Die anschließende Berechnung benötigt etwas Zeit," & Chr(10) & _
"aber am Ende erscheint automatisch ein Hinweis.", "Berechnungsjahr", , Type:=2)
If y1 = "Falsch" Then Exit Sub
If IsNumeric(y1) Then
y1 = CLng(y1)
Else
MsgBox "Leider ist Ihre Eingabe keine gültige vierstellige Jahreszahl"
GoTo Berechnungsjahr1
End If
If y1  2020 Then
MsgBox "Leider ist Ihre Eingabe keine gültige vierstellige Jahreszahl"
GoTo Berechnungsjahr1
End If
End Sub

Schöne Grüße
Bernd
AW: schon 'select case' probiert? oT
11.06.2010 08:16:49
JOWE
AW: schon 'select case' probiert? oT
11.06.2010 08:22:24
Bernd
Hallo JOWE,
dafür reichen meine Anfängerkenntnisse noch nicht aus.
Aber ich wüsste schon gerne wie das geht.
Schöne Grüße
Bernd
AW: schon 'select case' probiert? oT
11.06.2010 08:52:37
JOWE
Zitat aus der Online-Hilfe:
Sub pruefen()
Dim Zahl
' Variable initialisieren
Zahl = 8
' Zahl auswerten
Select Case Zahl
'Zahl von 1 bis 5.
Case 1 To 5
Debug.Print 'trifft zu wenn Zahl >= 8 und 
Gruß
Jochen
AW: schon 'select case' probiert? oT
11.06.2010 11:46:41
Bernd
Hallo Jowe,
habe es jetzt auch einmal mit Select Case versucht, aber ich bekomme es nicht fehlerfrei hin. Wenn ich Text eingebe beendet es die Prozedur anstatt die MSGBox zu öffnen. Was stimmt nicht?
Sub BeJaV()
Dim y1$
' Festlegung des Berechnungsjahres als Variable y1
Do
y1 = Application.InputBox("Bitte geben Sie das Berechnungsjahr ein!" & _
Chr(10) & "- immer vierstellig, zum Beispiel 2008 -" & _
Chr(10) & "" & Chr(10) & _
"Die anschließende Berechnung benötigt etwas Zeit," & Chr(10) & _
"aber am Ende erscheint automatisch ein Hinweis.", "Berechnungsjahr", , Type:=2)
Select Case y1
Case Is = False
Exit Sub
Case Is > 2006 

Schöne Grüße
Bernd
Anzeige
Problem mit Select Case
11.06.2010 11:51:33
Bernd
Hallo Jowe,
habe es jetzt auch einmal mit Select Case versucht, aber ich bekomme es nicht fehlerfrei hin. Wenn ich Text eingebe beendet es die Prozedur anstatt die MSGBox zu öffnen. Was stimmt nicht?
Sub BeJaV()
Dim y1$
' Festlegung des Berechnungsjahres als Variable y1
Do
y1 = Application.InputBox("Bitte geben Sie das Berechnungsjahr ein!" & _
Chr(10) & "- immer vierstellig, zum Beispiel 2008 -" & _
Chr(10) & "" & Chr(10) & _
"Die anschließende Berechnung benötigt etwas Zeit," & Chr(10) & _
"aber am Ende erscheint automatisch ein Hinweis.", "Berechnungsjahr", , Type:=2)
Select Case y1
Case Is = False
Exit Sub
Case Is > 2006 

Schöne Grüße
Bernd
Anzeige
keine Probleme mit Select Case
11.06.2010 13:02:14
Erich
Hi Bernd,
da stimmt etliches nicht.
y1 ist ein String. Den kannst du nicht gut mit False (boolesch) vergleichen.
Bist du sicher, dass der String in y1 richtig mit den Zahlen 2006 und 2020 verglichen wird?
(Schau mal in die VBA-Hilfe zu Vergleichsoperatoren.)
Warum lässt du dir von der InputBox eigentlich einen Text geben (Type:=2)?
Warum nicht gleich eine Zahl (Type:=1)?
Case Is > 2006 (2006 True
Das würde man so richtig schreiben:
Case 2007 To 2020
Hier mein Vorschlag (auch wenn ich Select Case in diesem Fall für sinnlos halte):

Sub BeJaVn()
Dim y1 As Long
' Festlegung des Berechnungsjahres als Variable y1
Do
y1 = Application.InputBox("Bitte geben Sie das Berechnungsjahr ein!" & _
vbLf & "- immer vierstellig, zum Beispiel 2008 -" & _
vbLf & vbLf & "Die anschließende Berechnung benötigt etwas Zeit," & _
vbLf & "aber am Ende erscheint automatisch ein Hinweis.", _
"Berechnungsjahr", , Type:=1)
Select Case y1
Case 2007 To 2020:      Exit Do
End Select
MsgBox ("Leider ist Ihre Eingabe keine gültige vierstellige Jahreszahl")
Loop
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Problem mit Select Case
11.06.2010 13:27:08
JOWE
mach's mal so:
Sub BeJaV()
Dim y1 'wieso hattest Du hier 'Dim y1$' ?
' Festlegung des Berechnungsjahres als Variable y1
Do
Berechnungsjahr1:
y1 = Application.InputBox("Bitte geben Sie das Berechnungsjahr ein!" & _
Chr(10) & "- immer vierstellig, zum Beispiel 2008 -" & _
Chr(10) & "" & Chr(10) & _
"Die anschließende Berechnung benötigt etwas Zeit," & Chr(10) & _
"aber am Ende erscheint automatisch ein Hinweis.", "Berechnungsjahr")
Select Case y1
Case "", Null, False
Exit Sub
Case Not IsNumeric(y1)
Exit Do
Case Is  2020
Exit Do
Case Else
MsgBox y1
'hier für den Fall dass y1
'kein Text ist und
'größer gleich 2006 und kleine gleich 2010 ist
'Folgeanweisungen einbauen
End Select
Loop
End Sub

Anzeige
weiterhin kein Problem ...
11.06.2010 16:07:53
Erich
Hi Bernd,
sorry, in meiner letzten Version fehlt der "Notausgang" bei "Abbrechen".
Hier die Korrektur:

Sub BeJaVn()
Dim lngJahr As Long
' Festlegung des Berechnungsjahres als Variable lngJahr
Do
lngJahr = Application.InputBox("Bitte geben Sie das Berechnungsjahr ein!" & _
vbLf & "- immer vierstellig, zum Beispiel 2008 -" & _
vbLf & vbLf & "Die anschließende Berechnung benötigt etwas Zeit," & _
vbLf & "aber am Ende erscheint automatisch ein Hinweis.", _
"Berechnungsjahr", , Type:=1)
Select Case lngJahr
Case 0:                 Exit Sub
Case 2007 To 2020:      Exit Do
End Select
MsgBox "Leider ist Ihre Eingabe keine gültige vierstellige Jahreszahl."
Loop
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Vorschlag ohne Select Case
11.06.2010 09:14:55
Erich
Hi Bernd,
schau dir das mal an:

Option Explicit
Sub BJV()
Dim bolOK As Boolean, strEin As String, y1 As Long
' Festlegung des Berechnungsjahres als Variable y1
While Not bolOK
strEin = Application.InputBox("Bitte geben Sie das Berechnungsjahr ein!" & _
vbLf & "- immer vierstellig, zum Beispiel 2008 -" & _
vbLf & vbLf & "Die anschließende Berechnung benötigt etwas Zeit," & _
vbLf & "aber am Ende erscheint automatisch ein Hinweis.", _
"Berechnungsjahr", , Type:=2)
If strEin = "Falsch" Then Exit Sub
If IsNumeric(strEin) Then
y1 = CLng(strEin)
If y1 > 2006 And y1 
Noch eine Bemerkung zu "y1 = CLng(y1)":
y1 ist als String deklariert. Diese Anweisung macht aus einer Zeichenkette "2468,5" die Zeichenkette "2469".
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
einfacher ohne "bolOK"
11.06.2010 09:59:39
Erich
Hi Bernd,
so ist es - denke ich - einfacher und klarer:

Option Explicit
Sub BJV()
Dim strEin As String, y1 As Long
' Festlegung des Berechnungsjahres als Variable y1
Do
strEin = Application.InputBox("Bitte geben Sie das Berechnungsjahr ein!" & _
vbLf & "- immer vierstellig, zum Beispiel 2008 -" & _
vbLf & vbLf & "Die anschließende Berechnung benötigt etwas Zeit," & _
vbLf & "aber am Ende erscheint automatisch ein Hinweis.", _
"Berechnungsjahr", , Type:=2)
If strEin = "Falsch" Then Exit Sub
If IsNumeric(strEin) Then
y1 = CLng(strEin)
If y1 > 2006 And y1 
@Jochen: Was ist an der Online-Hilfe eigentlich "Online"? Der Begriff ist nicht nur hier sehr verbreitet.
Manchmal ist die Excel-Hilfe gemeint, manchmal die VBA-Hilfe. Ich würde das dann einfach so nennen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: einfacher ohne "bolOK"
11.06.2010 10:37:32
Bernd
Hallo Erich,
Du hast natürlich recht mit dem "CLng". Ursprünglich war die Prozedur mal anders. Deswegen habe ich deinem Hinweis und deine Beispiele meine Prozedur noch einmal überdacht. Sie sieht jetzt so aus:
Sub BJV3()
Dim y1$
Do
' Festlegung des Berechnungsjahres als Variable y1
Berechnungsjahr1:
y1 = Application.InputBox("Bitte geben Sie das Berechnungsjahr ein!" & _
Chr(10) & "- immer vierstellig, zum Beispiel 2008 -" & _
Chr(10) & "" & Chr(10) & _
"Die anschließende Berechnung benötigt etwas Zeit," & Chr(10) & _
"aber am Ende erscheint automatisch ein Hinweis.", "Berechnungsjahr", , Type:=2)
If y1 = "Falsch" Then Exit Sub
If IsNumeric(y1) Then If y1 > 2006 And y1 

Neu für mich war das Do/Loop, um nach einen Wahrheitswert die If Schleife verlassen. Das bringt mir Vereinfachung in einigen meiner Prozeduren.
Vielen Dank und schöne Grüße
Bernd
Anzeige
Makroname BJV3
11.06.2010 10:44:28
Rudi
Hallo,
vorsicht mit dem Prozedurnamen. In XL2007 gibt es eine Zelle, die so heißt.
Gruß
Rudi
AW: Makroname BJV3
11.06.2010 10:51:11
Bernd
Hallo Rudi,
danke für den Hinweis, gut zu Wissen. Der Name war aber nur für das Beispiel. Ansonsten vergebe ich immer aussagekräftigere Namen.
Schöne Grüße
Bernd
einfacher ohne 'Berechnungsjahr1'
11.06.2010 11:03:23
Erich
Hi Bernd,
hast du nicht gesehen, dass in meinem Code "Berechnungsjahr1" nicht mehr vorkommt?
Mein Tipp: Lass die beiden Zeilen
Berechnungsjahr1:
GoTo Berechnungsjahr1
einfach mal weg. Dafür ist doch jetzt das "Do ... Loop" da.
Ändert sich dann irgend etwas? (außer natürlich, dass der Code übersichtlicher wird)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: einfacher ohne 'Berechnungsjahr1'
11.06.2010 11:10:58
Bernd
Hallo Erich,
nein es ändert sich natürlich nichts dadurch und eigentlich wollte ich es auch rausnehmen.
Danke für den Hinweis.
Schöne Grüße
Bernd

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige