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?

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.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
Iamiam  24.06.2016, 21:58

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

1
Oubyi, UserMod Light  24.06.2016, 22:28
@Iamiam

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)

1
pauli995 
Fragesteller
 28.06.2016, 06:23
@Oubyi, UserMod Light

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

0
Oubyi, UserMod Light  28.06.2016, 17:37
@pauli995

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?

0
pauli995 
Fragesteller
 05.07.2016, 07:37
@Oubyi, UserMod Light
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 :(

0
Oubyi, UserMod Light  05.07.2016, 12:15
@pauli995

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

If WorksheetFunction.CountA(Range("C8,E8,G8,C12,E12,C16")) < 6 Then
0

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.

pauli995 
Fragesteller
 24.06.2016, 09:39

schade, klappt nicht... trotzdem danke!

0
Orsovai  24.06.2016, 09:52

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

2
pauli995 
Fragesteller
 28.06.2016, 06:15
@Orsovai

Sub Main()

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

[speicherbuttornbetter]

Else: Exit Sub

End If

End Sub

0
Orsovai  28.06.2016, 07:38

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

1
pauli995 
Fragesteller
 05.07.2016, 07:47
@Orsovai

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? 

0
Orsovai  05.07.2016, 10:37

Ich habe es doch oben nochmals geschrieben:

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

0

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