425 Aufrufe
Gefragt in Tabellenkalkulation von jelena Mitglied (737 Punkte)

Hallo guten Tag, hätte widermal eine Bitte. Wenn ich dieses Makro ein 2tes mal ausführen möchte (aus versehen) soll nichts ausgeführt werden da sonst eine Fehlermeldung kommt. Danke

Private Sub CommandButton1_Click()
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "WENN(C4="""";""0"";""x"")"
    Range("D4").Select
    ActiveSheet.Paste
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",""0"",""x"")"
    Range("D4").Select
    Selection.AutoFill Destination:=Range("D4:D466"), Type:=xlFillDefault
    Range("D4:D466").Select
    
    Selection.AutoFilter
    ActiveSheet.Range("$D$4:$D$466").AutoFilter Field:=1, Criteria1:="0"
    Rows("5:465").Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.Range("$D$4:$D$235").AutoFilter Field:=1
    Range("C4:D4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range("C4:C235").Select
    Selection.Copy
    
    Range("E3").Select
    ActiveSheet.Paste
    Range("E3").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("D4").Select
    Selection.End(xlDown).Select
    Rows("235:235").Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-210
    Range("E4").Select
    'Selection.AutoFilter
    Selection.AutoFilter
    
    Range("F3").Select
    Selection.AutoFill Destination:=Range("F3:F234")
    Range("F3:F234").Select
    Selection.AutoFilter
    Selection.AutoFilter
    ActiveSheet.Range("$F$3:$F$234").AutoFilter Field:=1, Criteria1:="WAHR"
    Rows("5:5").Select
    
    Rows("5:233").Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.Range("$F$3:$F$119").AutoFilter Field:=1
    Range("E4").Select
    
    Range("F3:G3").Select
    Selection.AutoFilter
    Selection.AutoFilter
    Range("G3").Select
    Selection.AutoFill Destination:=Range("G3:G119")
    Range("G3:G119").Select
    Range("A1").Select
End Sub

Meine Fehlermeldung

13 Antworten

+1 Punkt
Beantwortet von m-o Profi (22.7k Punkte)
Bearbeitet von m-o

Hallo Jelena,

mit dem Paste-Befehl willst du ja offensichtlich kopierte Daten in Zelle D4 einfügen. Dann schreibst du aber eine Formel in die selbe Zelle??

Was mir außerdem noch auffällt:

Willst du hier eine Formel einfügen?

ActiveCell.FormulaR1C1 = "WENN(C4="""";""0"";""x"")" 

Im Moment fügst du die Formel als Text ein. Wenn du eine Formel einfügen willst, müsste das so aussehen:

ActiveCell.FormulaLocal = "=WENN(C4="""";""0"";""x"")"

In Zelle E3 fügst du auch etwas ein, löschst es dann wieder?

Willst du hier etwa alle Zeilen löschen, bei denen in Spalte F der Wert "Wahr" steht?

Gruß

M.O.

0 Punkte
Beantwortet von jelena Mitglied (737 Punkte)

Hallo M.O. ja ich möchte bei denen in Spalte F der Wert "Wahr" steht löschen, es soll beim 2ten Makro  Aufruf (aus versehen) nichts passieren da die Daten ab Spalte ("C4") neu eingetragen werden. Danke

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

Hallo Jelena,

am einfachsten kann man das mit einer Sicherheitsabfrage lösen. Hier mal das reine Löschmakro.

Sub loeschen()
Dim lngZeile As Long
Dim lngLetzte As Long
Dim Antwort

'Nachfrage, ob das Makro ausgeführt werden soll
Antwort = MsgBox("Sollen alle Zeilen in Spalte F mit dem Wert Wahr gelöscht werden?", 36, "Löschen starten?")

'Abbruch, falls nein ausgewählt wurde
If Antwort = vbNo Then Exit Sub

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'zum Löschen letzte beschriebene Zeile in Spalte F ermitteln
lngLetzte = ActiveSheet.Cells(Rows.Count, 6).End(xlUp).Row

'nun Datensätze ab letzter Zeile bis Zeile 4 durchlaufen
For lngZeile = lngLetzte To 4 Step -1
  'und alle Zeilen mit dem Wert "Wahr" in Spalte F löschen
  If Cells(lngZeile, 6).Value = "Wahr" Then Rows(lngZeile).Delete
Next lngZeile

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

End Sub

Gruß

M.O.

0 Punkte
Beantwortet von jelena Mitglied (737 Punkte)
Hallo M.O. mein Makro funktioniert wie ich es möchte 
ActiveCell.FormulaLocal = "=WENN(C4="""";""0"";""x"")" habe ich geändert, 
es soll aber wenn ich das Makro mit den gleichen Daten ein 2tes mal anklicke (aus Versehen) nichts passieren da die Daten ab Spalte ("C4") neu eingetragen werden. Danke
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)
Hi Jelena,

der Fehler kommt wenn die Zwischenablage leer ist. Ich nehme also an, dass es bei dir so läuft, dass du vor Ausführung deines Makros bereits etwas kopiert (Strg+C) hattest?

Frage: wozu benötigst du überhaupt ein Makro, wenn du es nur einmal ausführen willst?

Bis später, Karin
0 Punkte
Beantwortet von jelena Mitglied (737 Punkte)

Hallo Karin, sobald ich das Makro ausgeführt habe werden alle daten gelöscht und in Spalte ("C4:C??") werden neue Daten eingetragen und das Makro wird wieder neu gestartet. Das Makro kann nicht ein 2tes mal (mit denselben Daten) gestartet werden da einige Daten fehlen. Fehlermeldung ActiveSheet.Paste. Wie kann ich das verhindern. Danke

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Jelena,

ja, du hattest bereits geschrieben, dass das Makro nicht ein zweites Mal gestartet werden kann - ich kann durchaus lesen... ;-)

Weshalb der Fehler beim 2. Ausführen auftritt, hatte ich erläutert - das hat nichts damit zu tun, dass Daten fehlen, sondern es ist einfach so: wenn du etwas einfügen willst, musst du vorher auch etwas kopiert haben. Vor dem 1. Mal Ausführen hast du das offensichtlich getan, denn sonst würde der Fehler bereits beim 1. Mal auftreten. Was (welche Zellen) also kopierst du, damit es in die Zelle D4 eingefügt werden soll mit diesen beiden Zeilen:

    Range("D4").Select
    ActiveSheet.Paste

M.E. ist deine gelb markierte Zeile aber gar nicht notwendig, wenn es sich nur um den Inhalt einer Zelle handelt, da du anschließend in dieselbe Zelle eine Formel einträgst, die das Eingefügte sowieso überschreibt.

Bis später, Karin

0 Punkte
Beantwortet von jelena Mitglied (737 Punkte)

Hallo Karin, ohne ActiveSheet.Paste funktioniert es nicht, ich muss noch etwas probieren. Danke für die Mühe.

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Jelena,

weshalb beantwortest du nicht einfach mal meine Frage:

Was (welche Zellen) also kopierst du, damit es in die Zelle D4 eingefügt werden soll

Und noch eine zweite Frage: WAS funktionert ohne ActiveSheet.Paste nicht? Aussagen wie "es funktioniert nicht" sind absolut nicht hilfreich.

Andernfalls können wir noch tagelang ohne Resultat hin und her diskutieren.

Bis später, Karin

0 Punkte
Beantwortet von jelena Mitglied (737 Punkte)

Hallo Karin, wenn in der Zelle ("D4") ein "x" steht sollte nichts passieren ansonsten soll das nachfolgende Makro ausgeführt werden denn das macht was ich möchte. Danke

Private Sub CommandButton1_Click()
    Range("G1").Select
    ActiveCell.FormulaLocal = "=WENN(C3="""";""0"";""x"")"  'hat M.O. geschrieben
    Range("D3").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",""0"",""x"")"
    Range("D3").Select
    Selection.AutoFill Destination:=Range("D3:D464"), Type:=xlFillDefault
    Range("D3:D465").Select
    
    Selection.AutoFilter
    ActiveSheet.Range("$D$3:$D$465").AutoFilter Field:=1, Criteria1:="0"
    Rows("4:465").Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.Range("$D$3:$D$234").AutoFilter Field:=1
    Range("C3:D3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range("C3:C234").Select
    Selection.Copy
    
    Range("E2").Select
    ActiveSheet.Paste
    Range("E2").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("D3").Select
    Selection.End(xlDown).Select
    Rows("234:234").Select
    Selection.ClearContents
    'ActiveWindow.SmallScroll Down:=-210
    Range("E3").Select
    'Selection.AutoFilter
    Selection.AutoFilter
    
    Range("F2").Select
    Selection.AutoFill Destination:=Range("F2:F233")
    Range("F2:F233").Select
    Selection.AutoFilter
    Selection.AutoFilter
    ActiveSheet.Range("$F$2:$F$233").AutoFilter Field:=1, Criteria1:="WAHR"
    Rows("5:5").Select
    
    Rows("4:232").Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.Range("$F$2:$F$118").AutoFilter Field:=1
    Range("E3").Select
    
    Range("F2:G2").Select
    Selection.AutoFilter
    Selection.AutoFilter
    Range("G2").Select
    Selection.AutoFill Destination:=Range("G2:G118")
    Range("G2:G118").Select
    Range("A3").Select
End Sub

...