519 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,

ich habe unten stehendes Makro mit einem Button verbunden.
Nun möchte ich, dass dieser Button nach einmaliger Verwendung deaktiviert wird. Wie muß der Code verändert werden?

Sub Artikel_auswählen()
'
' Artikel_auswählen Makro
'
ActiveSheet.Range("$A$1:$D$10731").AutoFilter Field:=3
ActiveSheet.Range("$A$1:$D$10731").AutoFilter Field:=6, Criteria1:="<>"
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Aktionsplanung").Select
Range("A2").Select
ActiveSheet.Paste
Range("F4").Select
Sheets("Artikelliste").Select
Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$D$10731").AutoFilter Field:=4
Range("C11").Select
Sheets("Aktionsplanung").Select

End Sub

6 Antworten

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

ich würde da einen "Schalter" einbauen, z.B. so:
Sub Artikel_auswählen()
'
' Artikel_auswählen Makro
'
If ActiveSheet.Range("F3") = 1 Then
MsgBox "Das Makro darf nicht mehr ausgeführt werden!", 16, "Fehler"
Exit Sub
End If

ActiveSheet.Range("F3") = 1
'ab hier dann dein Makro
ActiveSheet.Range("$A$1:$D$10731").AutoFilter Field:=3
ActiveSheet.Range("$A$1:$D$10731").AutoFilter Field:=6, Criteria1:="<>"
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Aktionsplanung").Select
Range("A2").Select
ActiveSheet.Paste
Range("F4").Select
Sheets("Artikelliste").Select
Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$D$10731").AutoFilter Field:=4
Range("C11").Select
Sheets("Aktionsplanung").Select
End Sub

Wobei ich die Zelle (hier im Beispiel F3) so wählen würde, dass diese unter deinem Button liegt.

Leider schreibst du nicht, wann das Makro wieder ausgeführt werden darf, damit man diesen Schalter auch wieder deaktivieren kann.

Falls du nur verhindern willst, dass das Makro bei bestehender Filterung ausgeführt wird, dann kannst du das z.B. so machen:
Sub Artikel_auswählen()
'
' Artikel_auswählen Makro
'
If ActiveSheet.FilterMode Then
MsgBox "Das Makro darf bei bestehender Filterung nicht mehr ausgeführt werden!", 16, "Fehler"
Exit Sub
End If
'ab hier dann dein Makro
...


Gruß

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

perfekt, vielen herzlichen Dank.
Ich habe den zweiten Code verwendet, da er genau das ist, was ich suchte :-).

Gruß,
Colatrinker
0 Punkte
Beantwortet von
Hallo,

ich habe da doch noch einen Änderungswunsch:
Das Makro soll nur dann nicht ausgeführt werden können, wenn die Zelle A2 im Tabellenblatt "Aktionsplanung" bereits mit Daten gefüllt ist.

Mein Makroumbau funktioniert leider nicht :-(.

Sub Artikel_auswählen()
'
If Sheets("Aktionsplanung").Range("A2") = 1 Then
MsgBox "Neue Artikel DIREKT in das Tabellenblatt Aktionsplanung eintragen!", 16, "Fehler"
Exit Sub
End If

ActiveSheet.Range("H1") = 1
'ab hier dann dein Makro
ActiveSheet.Range("$A$1:$D$10731").AutoFilter Field:=3
ActiveSheet.Range("$A$1:$D$10731").AutoFilter Field:=6, Criteria1:="<>"
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Aktionsplanung").Select
Range("A2").Select
ActiveSheet.Paste
Range("F4").Select
Sheets("Artikelliste").Select
Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$D$10731").AutoFilter Field:=4
Range("C11").Select
Sheets("Aktionsplanung").Select
End Sub
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo,
vielleicht so:

Sub asfa()
If Sheets("Aktionsplanung").Range("A2") <> "" Then
MsgBox "Neue Artikel DIREKT in das Tabellenblatt Aktionsplanung eintragen!", 16, "Fehler"
Exit Sub
End Sub

Gruß
fedjo
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Oh,
If Sheets("Aktionsplanung").Range("A2") <> "" Then
MsgBox "Neue Artikel DIREKT in das Tabellenblatt Aktionsplanung eintragen!", 16, "Fehler"
Exit Sub
0 Punkte
Beantwortet von
Super, vielen Dank für die tolle Hilfe. Das Makro funktioniert einwandfrei.

If Sheets("Aktionsplanung").Range("A2") <> "" Then
MsgBox "Neue Artikel DIREKT in das Tabellenblatt Aktionsplanung eintragen!", 16, "Fehler"
Exit Sub

Schönes Wochenende.
Gruß,
Colatrinker
...