Excel button mit makro erst ausführen wenn Zellen x1 y1 z1 ausgefüllt sind. teilweise >0 teilweise text. Ich bekomme es einfach nicht hin. bräuchte euere Hilfe?
Excel button mit makro erst ausführen wenn Zellen x1 y1 z1 ausgefüllt sind. teilweise >0 teilweise mit text. Ich bekomme es einfach nicht hin. ich kenne mich wenig mit visual basic aus und daher habe ich schwierigkeiten. freue mich über jeden Vorschlag!
3 Antworten
Excel button mit makro erst ausführen wenn Zellen x1 y1 z1 ausgefüllt sind.
Orsovais Vorschlag müsste eigentlich auch funktionieren.
Aber ich gebe Dir mal eine Alternative, so wie ich es verstehe:
Private Sub CommandButton1_Click()
If WorksheetFunction.CountA(Range("X1:Z1")) < 3 Then Exit Sub
'################
' Hier Dein Makro
'################
End Sub
Teste auf jeden Fall genau.
Anzahl2 = CountA, das muss man sich einfach merken
Da ich mir sowas nicht merken kann, greife ich auf diesen Trick zurück:
In der aktiven Zelle steht:
=ANZAHL2(A1)
In den Direktbereich des VBA-Fensters schreibe ich:
?activecell.Formula
und drücke Enter -->
=COUNTA(A1)
Leider bekomme ich das auch nciht hin. Ich denke ich mach fehler bei der Schreibweise. Hier mein Versuch:
Sub Recheck2_Klicken()
If WorksheetFunction.CountA(Range("B4;D4;D8") 'darf ich so aufzählen?
Exit Sub
[speichbuttonbetter]
End If
End Sub
NEIN!
Da gehören Kommata hin, das ist in VBA anders als direkt in Excel.
Außerdem fehlt bei Dir das <3 (und eine schließende Klammer 2)" ) , sonst macht das keinen Sinn.
Zudem wird Dein Teil
[speichbuttonbetter]
nie ausgeführt werden. Das End If gehört davor, oder Du lässt es ganz weg und schreibst das Exit Sub in die gleiche Zeile, so wie in meiner Vorlage.
So sollte es also klappen:
Sub Recheck2_Klicken()
If WorksheetFunction.CountA(Range("B4,D4,D8")) < 3 Then
Exit Sub
End If
[speichbuttonbetter]
End Sub
Oder?
Sub speichernbutton()
If WorksheetFunction.CountA(Range("C8,E8,G8,C12,E12,C16")) < 0 Then
Exit Sub
End If
[speichernbuttonteil1]
[speichernbuttonteil2]
MsgBox ("Die Daten wurden gespeichert.")
End Sub
es wird trotzdem ausgeführt :(
Da hast Du meine Code falsch gelesen/ verstanden.
Es muss heißen:
If WorksheetFunction.CountA(Range("C8,E8,G8,C12,E12,C16")) < 6 Then
Versuchs so
Sub Main()
If [Deine erste Zelle].Value >0 And [Deine zweite Zelle].Value <>"" And [Deine dritte Zelle] [Deine dritte Bedingung] Then
[Dein Makro]
Else Exit Sub
End Sub
Du prüfst also ob alle Deine Bedingungen erfüllt sind, wenn nicht verlässt Du Dein Makro mittels Exit Sub direkt wieder.
Ich glaube, Du greifst falsch auf Zellen zu. Das macht man so: Cells(Zeile,Spalte).
Dabei werden Zeile und Spalte als Zahl angegeben, wobei A=1, B=2...
Also
If Cells(4,4).Value >0 And Cells(6,8).Value <>"" And Cells.Value(2,4) <>"" Then...
Ich habe es doch oben nochmals geschrieben:
[3,8].Value ist Blödsinn. Ersetze das durch Cells(3,8).Value.
Habe es jetzt so gemacht und es klappt auch wenn es etwas umständlich ist:
Sub xbutton()
Dim rng As Range
Set rng = ActiveSheet.Range("C8, E8, G8, C12, E12, C16")
If Application.CountA(rng) < rng.Count Then
MsgBox ("Bitte folgende Eingabefelder ...")
Else: Call ybutton
End If
If Application.CountA(rng) < rng.Count Then
Exit Sub
End If
End Sub
...und man kann das auch als Worksheet_change()-Ereignismakro ins Codeblatt der Tabelle schreiben.
Das blöde an dieser Formel ist der Name:
Anzahl=Count
Anzahl2 = CountA, das muss man sich einfach merken und auch, dass es eine Funktion ist und deshalb nicht Range("X1:Z1").CounrA heisst!