bedingte Schaltfläche
Hallo SN User,
ich habe auf einem Tabellenblatt eine Schaltfläche eingefügt, die mit einem Makro belegt ist. Das Makro darf aber nur ausgeführt werden, wenn die beiden folgenden Bedingungen erfüllt sind:
1) Es muss mindestens eine Zeile unterhalb der Überschrift der Tabelle befüllt sein.
2) Jede befüllte Zeile muss vollständig befüllt sein. Es darf kein Feld leer bleiben. Was eingetragen wird ist egal bzw. durch Validierung bereits vorgegeben.
Ist es möglich, die Schaltfläche nur aktiv zu schalten, wenn diese Bedingungen erfüllt sind?
Alternative: Ist es möglich, die Schaltfläche auszublenden, solange die Bedingungen nicht erfüllt sind?
Danke im Voraus für Eure Hilfe.
Viele Grüße
Phlip
Antwort schreiben
Antwort 1 von nighty vom 27.03.2022, 20:26 Options
hi Phlip ^^
ein beispiel
gruss nighty
einzufuegen
alt+f11/projektexplorer/DeineTabelle
die 3 gibt an 2 positionen das indexende der spalten an
waere entsprechend an beiden positionen anzupassen
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim Schalter As Boolean
Dim Zelle As Variant
ReDim Bereich(1, 3) As Variant
If Target.Row > 1 Then
Bereich() = Range(Cells(Target.Row, 1), Cells(Target.Row, 3))
For Each Zelle In Bereich()
If Zelle = "" Then Schalter = True
Next Zelle
If Schalter = True Then
CommandButton1.Enabled = False
Else
CommandButton1.Enabled = True
End If
End If
Application.EnableEvents = True
End Sub
Antwort 2 von nighty vom 28.03.2022, 07:18 Options
hi Phlip ^^
mit dem cb button koennte es dann so aussehen
gruss nighty
Private Sub CommandButton1_Click()
CommandButton1.Enabled = False
Call DeinMakroname
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim Schalter As Boolean
Dim Zelle As Variant
ReDim Bereich(1, 3) As Variant
If Target.Row > 1 Then
Bereich() = Range(Cells(Target.Row, 1), Cells(Target.Row, 3))
For Each Zelle In Bereich()
If Zelle = "" Then
Schalter = True
Exit For
End If
Next Zelle
If Schalter = True Then
CommandButton1.Enabled = False
Else
CommandButton1.Enabled = True
End If
End If
Application.EnableEvents = True
End Sub
Antwort 3 von Beverly vom 28.03.2022, 12:05 Options
Hi Philip,
du kannst doch dein Makro für den Schalter mit Hilfe einer If-Verzweigung so schreiben, dass bei erfüllter Bedingung (alle Zellen ausgefüllt) das andere Makro gestartet wird, wenn nicht, dann eine MsgBox mit einem Hinweis dass nicht alle Zellen ausgefüllt sind.
Bis später,
Karin
Antwort 4 von Phlip vom 28.03.2022, 19:11 Options
Hallo nighty und Karin,
vielen Dank für Eure Hinweise. Leider gehen meine VB-Kenntnisse gegen null und ich habe folgende Probleme beim Verständnis bzw. bei der Umsetzung:
@ nighty: Ich habe den Code aus Deinem zweiten Posting bei vor dem Code des Makros eingefügt. Da es sich bei mir um 5 Spalten handelt, habe ich die 3en aus Deinem Code durch 5en ersetzt. Aber ich erkenne keinen Effekt.
@Karin: Den If-Teil könnte ich analog zu den If-Teilen in nightys Code wahrscheinlich noch nachbauen, aber ich glaube, das mit den Bedingungen bekomme ich nicht hin.
Evtl. hilft Euch die folgende Info noch zum besseren Verständnis, wo mein Problem ist. Das Tabellenblatt ist wie folgt aufgebaut
A1 - Tabellenüberschrift
Zeilen 2 und 3 leer
Zeile A4:E4 - Überschriften der Spalten
ab Zeile 5, die Einträge
Es ist egal, ob eine oder hundert Zeilen befüllt sind. Wichtig ist nur, dass wenn eine Zeile befüllt ist, sie auch komplett befüllt ist.
Tabellenüberschrift
Spalte A | Spalte B | Spalte C | Spalte D | Spalte E
Eintrag1| Eintrag2 | Eintrag 3 | Eintrag4 | Eintrag5
...
Es darf keiner der Einträge 1-5 fehlen, sonst darf das Makro nicht ausgeführt werden.
Allerdings: Wenn es jetzt größeren Aufwand machen würde, ist es den Aufwand nicht wert. Wenn Ihr also noch eine schnelle Idee habt, wie man das Problem lösen kann, die Euch keine Mühe bereitet, dann freue ich mich auf Eure Vorschläge. Wenn Ihr aber jetzt langwierig etwas erklären oder Code schreiben müsstest, dann lasst es bitte. Denn ich selbst habe auch nicht die Zeit, es entsprechend zu würdigen und möchte Euch daher nicht unnötig damit beschäftigen.
Gruß, Phlip
Antwort 5 von nighty vom 29.03.2022, 08:41 Options
hi Phlip ^^
du wirst es wohl falsch abgelegt haben
ich hab mal eine vielleicht bessere beschreibung bzw vorgehensweise aus dem netz kopiert und hier eingefügt
gruss nighty
p.s.
bei so wenigen zellen ist ein array natuerlich wie mit kanonen auf spatzen zu schiessen,aber schnell *grrrr* ,hier haette vielleicht eine rangebereichsangabe statt eines arrays ausgereicht
^^
während Excel aktiv ist, ist die Tastenkombination Alt + F11 zu drücken, damit öffnet sich das Fenster der Entwicklungsumgebung für VBA
mit Tastenkombination Strg + R den Projektexplorer öffnen und aktivieren
dort die gewünschte Datei per Doppelklick markieren, sie ist dann blau unterlegt
nun Doppelklick unterhalb dieser Datei auf das gewünschte Tabellenblatt, auf welches sich das Makro auswirken soll
nun ist in der rechten Fensterhälfte das Codefenster dieser Tabelle sichtbar. In diese kann der Code eingefügt werden
speichern und Visual Basic mit Tastenkombination Alt + F4 schließen
das Makro steht nun in der Datei zur Verfügung und wird durch Wechsel des Zelleninhaltes ausgelöst
Antwort 6 von Beverly vom 29.03.2022, 09:04 Options
Hi Philip,
If ActiveCell.Row > 4 Then
If Application.CountA(Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 5))) = 5 Then
MsgBox "Dein Makro"
Else
MsgBox "Bitte alle Zellen ausfüllen"
End If
End If
Bis später,
Karin