2.3k Aufrufe
Gefragt in Windows 7 von
Hallo VBA-Profis,

ich habe ein Problem mit VBA-Excel.
Zelle F100 im "GB"-Tabellenblatt muss leer ist oder gleichtzeitig die Zellen A100 bis
F100 müssen befüllt sein.
Sollte dies nicht eintreffen, dann soll eine Msg-Box aufpoppen mit der Meldung
"Nicht so befüllt, wie es sein sollte" und die alle hinterlegte Makros nicht ausführen
lassen. So sieht es auch und es funktioniert.

Private Sub CommandButton10_Click()

With Worksheets("GB")
If (.Cells(100, 6) = "") Or WorksheetFunction.CountA(Range("A100:F100")) = 6
Then

D_A 'Makro
D_B 'Makro


Else
MsgBox "Tabellenblaut GS, :" & vbCrLf _
& "bitte prüfen"
End If
End With

End Sub

Dieser Makro funktioniert, aber ich möchte es wie folgt erweitern und hier ist das
Problem:
Ich bräuchte jetzt das Makro so, dass er in zwei verschiedenen Tabellenblätter prüft
(nicht nur in "GB"), also auch im Tabellenblatt "PS"
bevor die Makros ausführt.
Voraussetzungen sind fast identisch (aber nur fast).
Tabellenblatt: "PS":
Zelle F100 im "GB"-Tabellenblatt leer ist oder gleichtzeitig die Zellen A100 bis F100
und L100 bis M100 befüllt sind.

Sollte dies jedoch nicht eintreffen, dann brauche ich eine Msg-Box-Fehlermeldung
mit folgendem Satz:

"Tabellenblatt PS bitte prüfen"

Ich sage schon jetzt danke.

Sollte es unverständlich gewesen sein, dann bitte ich um kurze Rückmeldung.

Gruß
Max

22 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

so ganz habe ich das noch nicht durchschaut.
Sollen die neuen Bedinungen
- Zelle F100 im Tabellenblatt GB leer
- oder gleichtzeitig die Zellen A100 bis F100 und L100 bis M100 im Tabellenblatt P5 befüllt
zusätzlich zu der im Makro dargestellten Bedingung geprüft werden oder statt dessen?

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,

Danke für Deine Bereitschaft.
Ich mache ein Beispiel, so verstehe ich es immer am besten:

Es geht um die Zellen A100-F100 und L100-M100.
Wenn die Zelle F100 leer ist, dann ist alles ok. Die Makros laufen
lassen.
Wenn die Zellen A100-F100 und L100-M100 alle befüllt sind, dann
Makros laufen lassen.

Wenn aber die Zelle nur eine Zelle bis sieben Zellen befüllt sind
(insgesamt sind ja 8), dann Makros nicht laufen lassen und
eine Msg-Box mit "geht nicht" soll aupoppen.

Das andere Makro läuft so und ich habe es hinbekommen, aber mit
zwei schaffe ich es nicht.

Danke sehr

Gruß
Max
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Max,

die einzelnen Bedingungen habe ich schon verstanden ;-). Nur habe ich nicht verstanden, wie alles zusammenhängen soll (siehe meinen ersten Post).

Soll die Prüfung jetzt extra laufen oder soll das in dein bestehendes Makro eingebaut werden?

Schreibe doch mal in diesem Stil auf, wie die Prüfung ablaufen soll:
[list]- falls Zelle F100 im Tabellenblatt GB leer, dann Makros laufen lassen
- andernfalls prüfen, ob im Tabellenblatt PS die Zellen A100-F100 und L100-M100 alle befüllt sind
- falls ja, dann Makros laufen lassen
- falls nein, dann Hinweis, das Tabellenblatt PS zu prüfen[/list]

Gruß

M.O.
0 Punkte
Beantwortet von
Hi M.O.,
so läuft es momentan:
1. Prüfen ob im Tabellenblatt „GB“ Zelle F100 leer ist.
2. Falls Leer, dann Makro „D_A“ und „D_B“ laufen lassen.
3. Falls Zelle F100 nicht leer, dann prüfen ob Zellen A100 bis F100
alle befüllt sind.
4. Falls alle befüllt, dann Makros laufen lassen.
5. Falls nicht alle befüllt, dann Makros nicht laufen lassen und
Fehlermeldung „Geht nicht“ aufpoppen lassen.

So soll es in Zukunft laufen:
1. Prüfen ob im Tabellenblatt „GB“ Zelle F100 leer ist und im
Tabellenblatt „PS“ Zelle F100 leer sind.
2. Falls beide Zellen leer sind (sowohl in GB als auch in PS
Blätter), dann Makro „D_A“ und „D_B“ laufen lassen.
3. Falls einer der beiden Zellen nicht leer (F100) ist (oder auch
beide), dann prüfen ob Zellen A100 bis F100 befüllt sind (Blatt „GB“)
und prüfen ob Zellen A100 bis F100 und L100 bis M100 befüllt sind
(Blatt „PS“).
4. Falls in beiden Tabellenblätter alle Zellen befüllt sind, dann
Makros laufen lassen
5. Falls im Blatt „GB“ alles OK, aber im Blatt „PS“ nicht OK, dann
Meldung : „geht nicht GB“ und Makros nicht laufen lassen.
6. Falls im Blatt „PB“ alles OK, aber im Blatt „GB“ nicht OK, dann
Meldung : „geht nicht PS“ und Makros nicht laufen lassen.
7. Falls in beiden Blätter „GB“ und „PS“ nicht OK, dann Meldung
„geht in GB und PS nicht“.

Ich hoffe sehr, dass es jetzt verständlich ist, andernfalls bitte ich um
Rückmeldung.

Gruß
Max
0 Punkte
Beantwortet von
Hi M.O.

im bestehenden Makro bitte einbauen

Gruß
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Max,

ja das war jetzt klarer ;-).

Probier mal das folgende Makro:

Sub Fehler()

Dim bOkay As Boolean
Dim bFehlerGB As Boolean
Dim bFehlerPS As Boolean

If Worksheets("GB").Cells(100, 6) = "" And Worksheets("PS").Cells(100, 6) = "" Then
bOkay = True
Else
If WorksheetFunction.CountA(Worksheets("GB").Range("A100:F100")) = 6 And WorksheetFunction.CountA(Worksheets("PS").Range("A100:F100")) = 6 And WorksheetFunction.CountA(Worksheets("PS").Range("L100:M100")) = 2 Then bOkay = True
End If

'falls alles Okay, dann die Makros aufrufen und danach Sub verlassen
If bOkay = True Then
'D_A 'Makro
'D_B 'Makro
Exit Sub
End If

'Prüfen, wo Fehler liegt

If Worksheets("GB").Cells(100, 6) <> "" And WorksheetFunction.CountA(Worksheets("GB").Range("A100:F100")) < 6 Then bFehlerGB = True
If Worksheets("PS").Cells(100, 6) <> "" And (WorksheetFunction.CountA(Worksheets("PS").Range("A100:F100")) < 6 Or WorksheetFunction.CountA(Worksheets("PS").Range("L100:M100")) < 2) Then bFehlerPS = True

'Ausgabe der Fehlermeldungen
If bFehlerGB = True And bFehlerPS = False Then MsgBox "Bitte Blatt GB überprüfen!", 16, "Fehler!"
If bFehlerGB = False And bFehlerPS = True Then MsgBox "Bitte Blatt PS überprüfen!", 16, "Fehler!"
If bFehlerGB = True And bFehlerPS = True Then MsgBox "Bitte Blätter GB und PS überprüfen!", 16, "Fehler!"

End Sub



Gruß

M.O.
0 Punkte
Beantwortet von
Es funktioniert genauso wie ich es mir gewünscht habe.
Genial.

Vielen Dank für die sehr professionelle Hilfe.

Gruß
Max
0 Punkte
Beantwortet von
Hallo M.O.,
es scheint, nachdem ich es ausprobiert habe, mit allen Varianten, dass ich bei der Änderung des Quelltexes einiges nicht ok läut.
Ich möchte jedoch ungerne den richtigen Quelltext zur Verfügung stellen. Hast Du eine Idee wie ich es Dir verschicken könnte?
Gruß,
Max
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Max,

leider ist eine Neuanmeldung als Member hier in diesem Forum seit einiger Zeit aufgrund technischer Schwierigkeiten nicht möglich, sonst könnte man das über persönliche Mitteilungen regeln.

Was hast du geändert und was funktioniert nicht? Schon mal die Namen der Arbeitsblätter und die Bereiche überprüft? Vor dem Aufruf der Makros hatte ich ein Hochkomma gesetzt. Hast du die gelöscht?

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

Danke für die Rückmeldung.

Also: wenn die Zellen F100 in den Tabellenblätter „GB“ und „PS“ befüllt sind, dann laufen die Makros (so wie es sein sollte) nicht.
Sobald ich die Zellen (bleiben wir als Bsp. nur im Tabellenblatt „GB“) A100 bis F100 befülle, dann passiert gar nichts, als ob die
Makros hinter den Makro-Button nicht existieren würde, also auch keine Msg-Box.

Hier zur Hifo:
Die Zellen A100 bis E100 sind mit Excel-Formeln hinterlegt:

A100 = WENN(W100="";"";C100&" "&D100)
B100 = WENN(W100="";"";1300&" "&RECHTS(L100;4))
C100 = WENN(W100="";"";RECHTS(O100;11))
D100 = WENN(W100 ……..)
E100 = WENN(W100 ……..)

Der Inhalt der Zelle F100 sind meistens so aus:
'Rev. of goods 3rd import/export

Die Ausgabe der Zellen in A100 bis E100 kann beispielsweise wie folgt aussehen, wenn die Zeile befüllt ist:
A100 = 10000000004 1033
B100 = 20000000003 9x3b
C100 =20000000003
D100 = 1033
E100 = DE

Zellenformat ist auf „Standard“ gesetzt.

Kann es sein, dass es an dieser Funktion liegt: „WorksheetFunction.CountA“?

Ja, die Hochkommas vor dem Aufruf der Makros habe ich gelöscht, sonst wäre nur ein Kommentar ;-)

Wenn Du mehr Info benötigst, dann sag es mir einfach.

Gruß
Max
...