Chris hat bei der Arbeit ein großes Arbeitsblatt, das mehrere Makros enthält. Eine davon löscht einen Zellenblock und verschiebt den Rest nach oben. Manchmal verwenden Benutzer das Makro jedoch nicht und löschen den Block stattdessen manuell. Es ist eine Katastrophe, wenn durch das Löschen die Zellen nach links anstatt nach oben verschoben werden.

Chris fragt sich, ob es eine Möglichkeit gibt, die Makros zu verwenden, um die Aufwärtsbewegung von Zellen zu erzwingen und die manuelle Bewegung von Zellen nach links auszuschließen.

Wie bei vielen Dingen in Excel gibt es mehrere Möglichkeiten, wie Sie dieses Problem angehen können. Ich kann hier nicht zu tief auf Einzelheiten eingehen, da jeder letztendlich gewählte Ansatz von der Art der Informationen im Arbeitsblatt und davon abhängt, was Sie zulassen oder nicht zulassen möchten. Die folgenden Abschnitte enthalten jedoch möglicherweise den Schlüssel, den Sie benötigen, um den für Sie am besten geeigneten Ansatz auszuwählen.

Schützen Sie das Arbeitsblatt

Ein einfacher (und effektiver) Ansatz besteht darin, Ihr Arbeitsblatt so zu gestalten, dass es geschützt werden kann. Natürlich würden Sie sicherstellen, dass alle Zellen, in die der Benutzer Informationen eingeben soll, ungeschützt sind. Andernfalls kann Ihr Makro sicherstellen, dass das Arbeitsblatt bei Aktivierung geschützt ist.

Dies schließt die Möglichkeit aus, dass der Benutzer Zellen manuell aus dem Arbeitsblatt löscht.

Dies bedeutet, dass der Benutzer (durch den Schutz) gezwungen ist, Ihr Makro zum Löschen auszuwählen, wenn der Zellenbereich gelöscht werden muss. Das Makro kann dann den Schutz des Arbeitsblatts aufheben, den Zellenbereich löschen und ihn erneut schützen.

Intercepting Deletes

Ein weiterer makrobasierter Ansatz besteht darin, mit dem BeforeDelete-Ereignis zu arbeiten, um zu steuern, was tatsächlich passiert. Das Folgende ist ein einfacher Ereignishandler, der die Grundlage für Ihre tatsächliche Verwendung sein kann:

Private Sub Worksheet_BeforeDelete()

Dim delRng As Range     Dim selRng As Range

On Error Resume Next     Set delRng = Range("C2:D5")  ' Change the range to the block                                  ' of cells to be deleted (manually                                  ' or by macro)

Set selRng = Application.Selection  ' Cells selected manually                                         ' by the user     If MyRng.Address = delRng.Address Then         Selection.Delete shift:=xlUp     End If End Sub

Der Ereignishandler vergleicht einfach den Bereich, den Sie löschen möchten, nur nach oben mit dem Bereich, den der Benutzer zum Löschen ausgewählt hat. Wenn die Bereiche identisch sind, löscht der Handler den Bereich und verschiebt ihn nach oben. Sie müssten natürlich den der delRng-Variablen zugewiesenen Bereich ändern, um ihn an den Bereich anzupassen, den Sie überwachen möchten.

Remapping the Delete Key

Apropos Löschen: Sie können auch die Entf-Taste neu zuordnen, damit sie das tut, was Sie wollen. Sie müssen lediglich ein Makro wie das folgende in das ThisWorkbook-Codemodul aufnehmen:

Private Sub Workbook_Open()

Application.OnKey "{DELETE}", "MyMacro()"

End Sub

Dies bedeutet, dass beim Öffnen der Arbeitsmappe die Entf-Taste neu zugeordnet wird, sodass MyMacro (ändern Sie dies in ein beliebiges Makro) automatisch ausgeführt wird, wenn sie gedrückt wird.

Beachten Sie, dass dieser Ansatz nur das Drücken der Entf-Taste betrifft. Löschungen, die auf andere Weise vorgenommen wurden, sind davon nicht betroffen. Für diese müssten Ihre Makros die Logik noch antizipieren und handhaben.

Der vollständige Ansatz

Das bringt uns zum vollständigen Ansatz. Dieser Ansatz bedeutet einfach, eine Liste aller verschiedenen Möglichkeiten zu erstellen, mit denen der Benutzer eine Löschung einleiten und diese dann abfangen kann. Die Liste (und die Interceptions) müssten notwendigerweise einige der bereits diskutierten Ansätze enthalten, z. B. die Behandlung des Entf-Schlüssels. Sie müssen auch herausfinden, wie Sie deaktivieren oder ändern können, was passiert, wenn der Benutzer mit der rechten Maustaste klickt oder wenn der Benutzer eine Löschoption aus dem Menüband auswählt.

(Möglicherweise möchten Sie sogar löschungsbezogene Optionen von der Benutzeroberfläche entfernen.)

Dieser Ansatz kann sehr lang sein, da eine umfassende Liste von Löschmethoden mühsam zusammenzustellen und zu handhaben sein kann.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (13632) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.