Das automatische Drehfeld in Microsoft Excel
Das automatische Drehfeld in Microsoft Excel
Trotz allem Komfort, den Microsoft Excel bietet, fehlt ein nützliches Feature: Ein Drehfeld am Zellrand, mit dem sich der Wert in der Zelle per Mausklick erhöhen oder verringern lässt (Bild 1). Das spart viel Zeit bei der Aktualisierung von Excel-Blättern mit großen Zahlenmengen, da sich die Werte alleine mit der Maus ändern lassen, ohne die Tastatur benutzen zu müssen.
Mit zwei kleinen Makros lässt sich diese Aktion einfach umsetzen, Programmierkenntnisse sind dafür nicht erforderlich. Für das hier vorgestellte Beispiel reicht es aus, wenn Sie wie unten beschrieben den gelisteten Makrocode (siehe auch Datei "Makrocode.txt") an die entsprechende Stelle in der Arbeitsmappe kopieren.
Die einzige Einschränkung ist, dass Drehfelder nur ganze Zahlen im Zahlenbereich von 0 bis 30.000 schreiben können. Die Schrittweite, mit der sie den Inhalt der verknüpften Zelle erhöhen oder verringern, lässt sich in den Eigenschaften festlegen. (Mehr Informationen zu Formularelementen und Drehfeldern: Aus der Excel-Trickkiste. Fortgeschrittene Techniken für Projektleiter. Teil 1: Ein Projektplan mit Teamauswahl, Projekt Magazin 20/2010 und Teil 2: Portfolio-Auswahl mit dynamischen Diagrammen, Projekt Magazin 21/2010)
Funktionsweise des Makros
Die Funktionsweise des Makros ist verhältnismäßig einfach: "SelectionChange" heißt das Ereignis, das mit der Positionierung des Zellzeigers ausgelöst wird. Es wird so programmiert, dass jede markierte Zelle automatisch ihr Drehfeld am rechten Rand erhält. Der Trick dabei: Als Position des Drehfelds wird einfach die linke obere Ecke der nächsten Zelle verwendet. "Target" ist der Objektname der Zelle, "target.next" liefert die Informationen über die nächste Zelle.
Aber Vorsicht: Da das Drehfeld nur dann erscheinen soll, wenn die markierte Zelle einen Zahlenwert enthält, muss das Makro zuerst prüfen, ob der Zellinhalt numerisch ist. Außerdem darf der Zellzeiger nicht in der letzten Spalte des Tabellen-Blatts stehen, da das Drehfeld dann nicht in der Ecke des nächsten Felds angezeigt werden kann. Auch bei verbundenen Zellen oder einer Mehrfachauswahl gibt es Probleme. Und natürlich darf die Zelle keine Formel enthalten, denn das Drehfeld würde diese überschreiben. Alle diese Fälle prüft das Makro ab. Tritt einer der genannten Fälle auf, springt es ohne das Drehfeld anzuzeigen an das Ende ("no Show").
Listing 1 zeigt den Makrocode mit Kommentaren zu den einzelnen Anweisungen.
Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rngCell, spB As Shape, spbBreite As Integer ' Schalter If Range("IV1").Value = "no spB" Then GoTo noShow ' Wenn mehr als eine Zelle markiert ist, ' bei verbunden Zellen oder wenn die Zelle Text enthält ' oder wenn der Wert größer als 30.000 ist If Target.Cells.Count > 1 _ Or Not IsNumeric(Target.Value) _ Or Target.Column = Target.End(xlToRight).Column _ Or Target.HasFormula _ Or Target.Value > 30000 Then GoTo noShow ' Breite des Drehfeldes festlegen spbBreite = 15 ' Aufruf der Funktion zum Löschen des Drehfelds delShape rngCell = Target.Address ' Drehfeld anlegen, Name zuweisen und Adresse aus der Zelle holen Set spB = ActiveSheet.Shapes.AddFormControl _ (xlSpinner, Target.Next.Left, Target.Next.Top, spbBreite, Target.Next.Height) With spB .Name = "spbDrehfeld" .ControlFormat.Value = Target.Value .ControlFormat.LinkedCell = Target.Address End With Exit Sub noShow: delShape End Sub Function delShape() ' Drehfeld wird gelöscht, falls vorhanden On Error Resume Next ActiveSheet.Shapes("spbDrehfeld").Delete On Error GoTo 0 Application.ScreenUpdating = True End Function |
Die Anweisung "Option Explicit" in der ersten Zeile stellt sicher, dass alle benutzten Variablen mit DIM deklariert sind. Excel fügt Sie automatisch in neue Module ein, wenn unter Extras / Optionen die Option "Variablendeklaration erforderlich" gesetzt ist.
Ereignismakros, also Makros, die nicht bewusst durch den Anwender, sondern durch ein Ereignis angestoßen werden (in unserem Fall durch das Markieren einer Zelle), greifen in Prozesse wie "Kopieren" und "Einfügen" ein. Sie können kritisch sein, wenn die darin programmierten Anweisungen Daten eintragen oder das Tabellenlayout ändern. Setzen Sie im Makro aus diesem Grund immer einen Schalter, der die Aktionen bei Bedarf abschaltet. Ein Eintrag in eine freie Zelle fernab des Auswertungsbereichs genügt für diesen Zweck, wenn das Makro eine Anweisung enthält, die ermittelt, ob dieser Eintrag gesetzt ist.
Im Beispiel lautet die zugehörige Anweisung:
anonym und genervt
17.11.2010