Frage von pauli995, 63

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!

Antwort
von Orsovai, 48

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.

Kommentar von pauli995 ,

schade, klappt nicht... trotzdem danke!

Kommentar von Orsovai ,

Dann hast Du etwas falsch gemacht. Poste bitte einfach mal Deinen Code.

Kommentar von pauli995 ,

Sub Main()

If [D4].Value > 0 And [F8],Value <> "" And [B4]. Value <> "" Then

[speicherbuttornbetter]

Else: Exit Sub

End If

End Sub

Kommentar von pauli995 ,

was mache ich falsch?

Kommentar von Orsovai ,

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...

Kommentar von pauli995 ,

Gerade die Zeile wird mir gelb markiert

Sub speichernbutton()


If [3,8].Value > 0 And [5,8].Value > 0 Then
[speichernbuttonzsm]
Else: Exit Sub
End If

End Sub

was mache ich nun falsch? 

Kommentar von Orsovai ,

Ich habe es doch oben nochmals geschrieben:

[3,8].Value ist Blödsinn. Ersetze das durch Cells(3,8).Value.

Expertenantwort
von Oubyi, Community-Experte für Excel, 27

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.

Kommentar von Iamiam ,

...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!

Kommentar von Oubyi ,

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)

Kommentar von Iamiam ,

ein guter Trick, mir absolut neu! danke!

Kommentar von pauli995 ,

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

Kommentar von Oubyi ,

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?

Kommentar von pauli995 ,
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 :(

Kommentar von Oubyi ,

Da hast Du meine Code falsch gelesen/ verstanden.
Es muss heißen:

If WorksheetFunction.CountA(Range("C8,E8,G8,C12,E12,C16")) < 6 Then
Antwort
von pauli995, 8

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

Keine passende Antwort gefunden?

Fragen Sie die Community