none
VBA-Problem in Excel RRS feed

  • Frage

  • Hallo zusammen,

    ich bin kein VBA-Experte und arbeite in der Regel mit dem Aufzeichnen von Makros und der anschließenden Anpassung des VBA-Codes.

    Ich habe nun folgendes Problem mit einem Makro in Excel:

    Soll per Makro diejenige Zeile gelöscht werden, die die aktive Zelle enthält, so funktioniert es dann nicht korrekt, wenn die Zeile eine Zelle enthält, die vertikal mit anderen Zellen verbunden ist. Wird der Löschvorgang von Hand ausgeführt, also die entsprechende Zeile durch Klick auf die Zeilennummer markiert und anschließend, nach rechtem Mausklick auf die Auswahl, aus dem Kontextmenü der Befehl „Zellen löschen“ gewählt, so funktioniert die Löschung wie gewünscht. Zeichnet man diesen Vorgang z.B. für Zeile 31 als Makro auf, so erhält man den folgenden Code:

    Rows("31:31").Select

    Selection.Delete Shift:=xlUp

    Dieser Code löscht aber immer die Zeile 31 und nicht die Zeile, die die aktive Zelle enthält. Der entsprechende Code dafür lautet:

    ActiveCell.Rows("1:1").EntireRow.Select

    Selection.Delete Shift:=xlUp

    Wird dieser Code ausgeführt, so werden immer alle Zeilen gelöscht, über die sich die verbundene Zelle erstreckt.

    Entsprechendes gilt für das Einfügen von Zeilen. Manuell wird nur eine Zeile eingefügt, per VBA analog dem oberen, zweiten Code werden immer so viele Zeilen eingefügt, wie die verbundene Zelle umfasst:

    Rows("31:31").Select

    Selection.Insert Shift:=xlDown

    funktioniert, aber immer nur für die konkrete Zeile, hier Zeile 31.

    ActiveCell.Rows("1:1").EntireRow.Select

    Selection.Insert Shift:=xlDown

    funktioniert nur wie gewünscht, wenn die Zeile mit der aktiven Zelle keine vertikal verbundenen Zellen enthält.

    Ich hoffe, ich habe mein Problem verständlich dargestellt und würde mich über hilfreiche Antworten sehr freuen. Dafür schon einmal herzlichen Dank!!!
    • Bearbeitet Hotzenolotz Donnerstag, 27. Dezember 2018 07:43
    Donnerstag, 27. Dezember 2018 07:24

Alle Antworten

  • Dies ist leider so korrektes Verhalten, da die vertikal verbundenen Zellen wie eine Zelle verwendet wird.
    Die Makroaufzeichnung geht natürlich immer von der aktuellen Zelle aus und setzte daher absolute Adressen.
    Mit ActiveCell greifst du dann auf die gerade aktive Zelle zu und kannst dann die gewünschten Aktionen per VBA auslösen, allerding wie du festgestellt hast, mit den bekannten Einschränkungen.
    Diese Einschränkungen müssten ebenso auch für den manuellen Modus gelten.

    Donnerstag, 27. Dezember 2018 09:44