VBA-Schulung. Ich zeige und erkläre den Makrorekorder.
Aufgabe: Zeichnen Sie ein Makro auf, das eine Zelle formatiert, beispielsweise: fett, kursiv, Schriftart, Schriftgröße, Ausrichtung, Hintergrundfarbe, … und testen es an einer anderen Zelle.
Eine Teilnehmerin beschwert sich, dass der Makrorekorder nicht „optimale Spaltenbreite“ aufzeichnet.
Was hat sie gemacht? Sie hat ihr Makro in einer anderen Zelle in einer anderen Spalte ausprobiert. Leider zeichnet der Makrorekorder „hart“ den Spaltennamen auf, beispielsweise:
Columns("D:D").EntireColumn.AutoFit
Später erkläre ich den Unterschied zwischen der relativen und der absoluten Aufzeichnung
Ein Freund von mir erklärt mir häufig, dass er sich nicht bei facebook anmeldet, weil fb ein Zeitfresser sei. Nun: ich kenne einen anderen Zeitfresser. Er heißt: VBA! Kennt ihr folgende Anomalie? Ich erstelle ein Userform mit einem Listenfeld. Zu den Einträgen sollen mehrere Einträge ausgewählt werden können. Ich entschließe mich für ein zweites Listenfeld, das ich daneben platziere. Dem Auftraggeber gefällt es nicht, weil die Userform groß und unübersichtlich ist (sehr viele Steuerelemente). Ich entschließe mich zu einer zweiten Userform. Also: Eintrag auf dem Listenfeld wird ausgewählt: Doppelklick, eine zweite Userform wird geöffnet, mit Werten gefüllt, von denen der Anwender mehrere auswählen kann (MultiSelect).
Zirka zwei Stunden lang habe ich über folgendes Problem gestutzt: Während des Doppelklicks öffnet sich die zweite Userform. Das Klickereignis wird schon abgefangen und sorgt dafür, dass auf der zweiten Liste der zweiten Maske auch Einträge selektiert werden. Sämtliche Versuche per VBA alles zu deselektieren (Selecetd(i) = False) scheitern! Ich habe mich dann entschieden die Userform umzubauen. Das Listenfeld der zweiten Form liegt nicht mehr über dem Listenfeld der ersten. Dann klappt es!
Böses, böses Excel – manchmal nervst du! Also doch lieber facebook – dort vertrödle ich weniger Zeit!
Die ersten dunklen Wolken am Horizont der neuen Funktion XVERWEIS.
Wenn die Funktion nicht nur einen Wert aus einer Spalte, sondern aus mehreren Spalten zurückgibt, kann man die Funktion leider nicht mit einem Doppelklick herunterziehen.
Ich erstelle ein Exceltabellenblatt, bei dem der Anwender zwischen zwei Texten wechseln kann. Je nach Text wird eine andere Liste für die Datenüberprüfung verwendet. Da die Liste dynamisch ist und aus einem anderen System kommt, muss ich ein paar Zeilen VBA-Code verwenden:
If Target.Value = „Für Standorte“ Or Target.Value = „Für Gebäude“ Then […]
Nach einer Weile meldet sich der Anwender und sagt, dass er auf diesem Tabellenblatt eine Fehlermeldung erhält. Ich schaue nach:
Das Gemeine: Der Anwender hat einen Doppelklick auf eine verbundene Zelle ausgeführt. Dadurch greift das Target-Objekt nicht – es nicht nun nicht mehr EINE Zelle, die einen Inhalt hat, sondern ein Zellbereich. Ich erhalte einen Fehler!
Also noch schnell eine Zeile Code außenrum – in der ersten Spalte wurde nichts verbunden. If Target.Column = 1 Then Und schon klappt es!
Ich möchte gerne per VBA auf einem geschützten Excel-Formular eine Dropdownliste (Datenüberprüfung) ändern. Okay – man hätte die auch per Formeln mit zwei Dropdownlisten erzeugen können – aber mit meiner VBA-Lösung bin ich flexibler.
Der Code lautet:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim intZeilen As Integer
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim intZeilen As Integer
If Target.Value = "Für Standorte" Or Target.Value = "Für Gebäude" Then
ActiveSheet.Unprotect
If Target.Value = "Für Standorte" Then
intZeilen = ThisWorkbook.Worksheets("tbl_Basisdaten").Range("B1").CurrentRegion.Rows.Count
Target.Value = "Für Gebäude"
With Target.Offset(0, 1).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=tbl_Basisdaten!$B$2:$B$" & intZeilen ' -- Spalte B bei "Standorten"
End With
ElseIf Target.Value = "Für Gebäude" Then
intZeilen = ThisWorkbook.Worksheets("tbl_Basisdaten").Range("D1").CurrentRegion.Rows.Count - 1
Target.Value = "Für Standorte"
With Target.Offset(0, 1).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=tbl_Basisdaten!$D$2:$D$" & intZeilen ' -- Spalte D bei "Gebäuden"
End With
End If
With Target.Offset(0, 1).Validation
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Target.Offset(0, 1).Value = ""
ActiveSheet.Protect
End If
End Sub
Ich erhalte einen Fehler:
Klaro – ich schützte das Blatt (ActiveSheet.Protect) und anschließend wirkt der Doppelklick, denn ich verwende ja das Ereignis BeforeDoubleClick. Die Lösung ist einfach: ich setze den Cursor auf eine nicht gesperrte Zelle – dann klappt es:
Target.Offset(0, 1).Activate
Witzigerweise befindet sich DANN der Cursor in keiner Zelle.
Komisch! In der letzten Excelschulung habe ich gelernt, dass der Doppelklick auf das kleine untere Kästchen dafür sorgt, dass die Formel runtergezogen wird. Bei mit klappt das aber nur manchmal. Warum?
Die Antwort: Achten Sie auf den Mauszeiger. Er muss ein kleines, schwarzes Kreuz bilden. Wenn Sie den Cursor etwas zu weit rechts oder links positioniert haben, erhalten Sie ein anderes Symbol (einen weißen Pfeil oder ein dickes, weißes Kreuz). Bei einem Doppelklick, wird entweder die Position der Zelle verändert oder die Zelle editiert.
Mit einem Doppelklick kann man herunterziehen.
Achten Sie dabei auch darauf, dass die Spalte links daneben gefüllt ist. In Excel 2013 beachtet Excel den „zusammenhängenden“ Bereich – das heißt: wenn „Lücken“ in der Spalte links davon ist, wird die Formel so weit heruntergezogen, wie die längste Spalte daneben gefüllt ist. Excel 2007 beachtet jedoch nur die Spalte direkt daneben.
Wenn ich früher auf eine Zelle einen Doppelklick gemacht habe, zeigte er mit den Inhalt der Zelle, beispielsweise die Formel, an. Seit einer Weile funktioniert das nicht mehr – mit einem Doppelklick hüpft er zur Seite. Ach ja – ich bin ganz sicher, dass ich weder auf den Rand der Zelle noch auf das Kästchen einen Doppelklick gemacht habe.
Doppelklick auf die Zelle
… und schwupp – weg ist er!
Die Antwort: Sehen Sie mal in den Optionen nach. Sicherlich haben Sie die Option „Direkte Zellbearbeitung zulassen“ ausgeschaltet.
Direkte Zellbearbeitung – wenn nicht, dann werden die Zellen markiert, mit denen Excel rechnet.
Übrigens: die Funktionstaste [F2] funktioniert immer – egal welche Option Sie eingeschaltet haben.
Ein Kollege hat mir den genialen Trick gezeigt, dass man mit einem Doppelklick auf das kleine, schwarze Kästchen rechts unten eine Formel bis nach unten ziehen kann. Toll – das spart mir viel Arbeit.
Allerdings: Warum geht das nicht bei meinem Excel?
Doppelklick funktioniert
Doppelklick funktioniert nicht.
Die Antwort: Bis Excel 2007 wird bei einem Doppelklick auf das Kästchen die Formel soweit herunter gezogen, wie die Spalte links neben der Formelspalte gefüllt ist. Erst ab Excel 2013 (Ihr Kollege verwendet Excel 2013) wird die Formel bis zum Ende des zusammenhängenden Bereiches (den Sie mit [Strg] + [*] ermitteln können) gezogen. EIne angenehme Verbesserung, die Sie im „alten“ Excel leider noch nicht haben.
Das wusste ich nicht! Wenn man auf das kleine Kästchen rechts unten einen Doppelklick macht, wird die Formel in der Zelle bis ganz nach unten gezogen. das hat mir der Azubi gezeigt. Toll. Aber als ich es bei meinem Rechner ausprobiert habe, hat es nicht funktioniert. Excel hat irgendwo zwischen drin gestoppt – auf alle Fälle hat er die Formel nicht bis nach unten gezogen. Warum?
Manchmal zieht er die Formel bis nach unten …
… manchmal auch nicht …
Die Antwort ist einfach: Schauen Sie sich Ihr Excel an und das Excel Ihres Azubis. Sie arbeiten mit Excel 2007; der Azubi mit Excel 2013 (das sehe ich an der Farbe der Spaltenköpfe). Bis Excel 2007 wird die Formel nur so weit nach unten gezogen wie die Spalte direkt daneben gefüllt ist. Aber Excel 2010 „überprüft“ er den zusammenhängenden Bereich, übergeht Leerzellen und orientiert sich an der letzten Zeile an irgend einer Spalte. Praktisch!
Erstaunlich: Manchmal bewirkt ein Doppelklick, dass ich „in der Zelle bin“, das heißt: ich kann den Text ändern. Manchmal sitzt der Cursor dann plötzlich an einer ganz anderen Stelle.
Die Antwort auf diese Frage ist einfach: Excel hat auf den Tabellenblättern drei verschiedene Mauszeiger (ein kleines, schwarzes Kreuz (an der rechten unteren Ecke), ein großes weißes Kreuz (auf der Zelle) und einen weißen Pfeil, der nach links oben zeigt, unter dem sich ein Vierfachkreuz befindet (an jedem der vier Ränder)). Je nach Mauszeiger ändert sich das Verhalten: Ein Doppelklick auf die Zelle bewirkt, dass sich der Cursor in der Zelle befindet, ein Doppelklick auf den Rand bewirkt, dass die Position des Cursors auf die letzte oder erste Zelle versetzt wird, in der noch etwas steht. Ein Doppelklick auf das rechte, untere Kästchen bewirkt, dass die Formel (oder der Inhalt) nach unten gezogen wird.
Ebenso haben Sie beim Ziehen einen Unterschied: schwarzes Kreuz „zieht“ die Formel, Pfeil verschiebt die Zelle und weißes Kreuz markiert die Zellen.
Drei unterschiedliche Mauszeiger, die etwas anderes bewirken beim Doppelklick und beim Ziehen.