Anzeige
Archiv - Navigation
1956to1960
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

MsgBox bei nicht erfüllter Bedingung

MsgBox bei nicht erfüllter Bedingung
01.01.2024 21:39:04
Patrick 2004
Hallo zusammen,

kann mir jemand bei der Erstellung der MsgBox helfen.
Bedingung soll sein "erst wenn alle Felder ("H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20,H22") ausgefüllt sind"
ist die Bedingung erfüllt.
Bei mir macht es das schon wenn nur "H4" ausgefüllt ist.
Was stimmt hier nicht?
Muss da ein or anstatt ein =

If Range("H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20,H22") = "" Then
MsgBox ("Bitte fülle alle Prozeßparameter-Felder aus und gib einen Grund der Änderung an")
Exit Sub
End If

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MsgBox bei nicht erfüllter Bedingung
01.01.2024 23:06:20
Piet
Hallo

benutze diesen Codeteil, damit sollte es klappen. Es muss die Zahl 18 herauskommen!
Zahl = WorksheetFunction.CountA(Range("H4:H20,H22")) 'gesamt = 18

Piet
ich hab erst mal ne Frage...
06.01.2024 18:54:12
Oberschlumpf
Hi Patrick,

vor einiger Zeit hattest du doch schon mal etwas mit dem Konstrukt Range("H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14...usw gefragt.
Ich meine mich zu erinnern, dass jemand dich darüber informierte, dass es gar nicht not tut, jede Zelle einzeln aufzuschreiben, sondern bei direkt aufeinander folgenden Zellen der : eine sehr große Hilfe ist...

...anstelle von...
Range("H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20,H22")
...müsstest du nur schreiben...
Range("H4:H20,H22")

So frage ich gerad mich, nee, macht ja keinen Sinn! - ich frage DICH: Wieso hast du den wirklich nützlichen Verbesserungsvorschlag nicht übernommen?

Und zu deiner eigentlichen Frage:
In diesem Fall musst du jede Zelle einzeln - und nicht wie du es versuchst, auch mit Doppelpunkt würde nicht gehen - abfragen.
DAS funktioniert am besten mit einer For/Next-Schleife, z Bsp so:



Dim lloRow As Long, lboNotOk As Boolean

For lloRow = 4 To 20
If Range("H" & lloRow).Value = "" Then
lboNotOk = True
Exit For
End If
Next
If Range("H22").Value = "" Then
lboNotOk = True
End If
If lboNotOk = True Then
MsgBox "Im Bereich H4:H20 und auch H22 müssen alle Zellen ausgefüllt sein. Bei mindestens einer Zelle fehlt der Eintrag noch."
End If

Ciao
Thorsten
Anzeige
AW: MsgBox bei nicht erfüllter Bedingung
06.01.2024 20:35:18
Daniel
Hi
den Vergleich "=" kannst du nur mit Einzelwerten verwenden.
Deine Range sind aber viele Werte.
Wenn du jetzt das "=" auf viele Werte anwendest, bekommst du entweder einen Fehler, oder es wird immer nur der erste Wert der Wertegruppe für den Vergleich verwendet.

ich würde hier die die Leerzellen im Zellbereich zählen

also im Prinzip so in deinem IF:
IF (Worksheetfunction.CountBlank(Range("H4:H20")) - (Range("H22")="")) > 0 Then

(H22 ist ein Einzelwert, der verglichen werden kann, in Berechnungen verwendet VBA ein TRUE als -1 und ein FALSE wie 0)

wenn du weißt, ob H21 immer einen wert hat oder nicht, dann kannst du das auch einfach in die Berechnung mit aufnehmen, um nur einen Bereich auswerten zu müssen, hier dann >1, wenn H21 immer leer ist und >0, wenn H21 befüllt ist
IF Worksheetfunction.CountBlank(Range("H4:H22")  > 0 Then


die Leerzellen zu zählen ist hier sinnvoller als die befüllten Zellen zu zählen, weil du bei jeder Leerzellenanzahl größer 0 die Meldung ausgeben musst.
Zählst du die befüllten Zellen, musst du zusätzlich zählen und angeben, wieviele Zellen überhaupt befüllt sein müssen, was eine zusätzliche Fehlerquelle darstellt und gerne mal vergessen wird, wenn Werte hinzukommen oder entfallen.

Gruß Daniel
Anzeige
AW: MsgBox bei nicht erfüllter Bedingung
02.01.2024 01:19:41
Patrick 2004
Hallo
habe keine Ahnung wo ich den Codeteil einsetzen soll

Zahl = WorksheetFunction.CountA(Range("H4:H20,H22")) 'gesamt = 18

ich bekomme das einfach nicht hin

Private Sub CommandButton1_Click()
If Range("H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20,H22") = "" Then
MsgBox ("Bitte fülle alle Prozeßparameter-Felder aus und gib einen Grund der Änderung an")
Exit Sub
End If
ActiveSheet.Unprotect "Geheim"
Dim lz1 As Long
lz1 = Cells(Rows.Count, "O").End(xlUp).Row + 1
If lz1 4 Then lz1 = 4
Range("H22:M26").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlTop
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20,H22,H23,H24,H25,H26").Select
Selection.Copy
Range("O" & lz1).PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=True
Application.CutCopyMode = False
Selection.UnMerge
Range("H22:M22,H23:M23,H24:M24,H25:M25,H26:M26").Select
Range("H26").Activate
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlTop
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("D22").Select
ActiveCell.FormulaR1C1 = ""
ActiveSheet.Protect "Geheim", DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige