Was mir an IQ fehlt, hol ich mit BMW wieder auf

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

Wir zeichnen das Makro relativ auf und erhalten:

ActiveCell.Columns("A:A").EntireColumn.EntireColumn.AutoFit

Mein Kommentar: funktioniert, aber „schön“ ist der Code nicht gerade. Besser wäre sicherlich:

ActiveCell.EntireColumn.AutoFit

Ich habe ein Rezept zum Abnehmen gefunden. Ich laufe im Supermarkt hinter ganz schlanken Leuten her und kaufe genau das Gleiche ein wie sie. Heute gibt es Luftballons bei mir!

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!

Beifahrer, die sagten „mach doch mal die üble Musik leiser“, fragten auch: „Wann darf ich wieder aus dem Kofferraum raus?“

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.

Also:

=XVERWEIS(O2;tbl_Kunden3[Nr];tbl_Kunden3[Vorname]:tbl_Kunden3[Ort];“nicht gefunden“)

Keinen Humor haben, aber sich einen Account bei facebook zulegen. Man geht doch auch nicht zu Ikea, wenn man keine Teelichter braucht.

Boah ist das widerlich!!! *)

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!

Mach dich erst einmal unbeliebt – dann wirst du auch nicht mehr erst genommen.

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.

Doppelklick geht nicht!

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?

doppelklick20150328_1

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.

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.

 

Doppelklick – und schwupp – weg ist er

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

Doppelklick auf die Zelle

... und schwupp - weg ist er!

… 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.

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.

Warum er und nicht ich?

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

Doppelklick funktioniert nicht.

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.

Doppelklick auf Kästchen

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 zieht er die Formel bis nach unten …

... manchmal auch nicht ...

… 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!

Seltsamer Doppelklick

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.

Drei unterschiedliche Mauszeiger, die etwas anderes bewirken beim Doppelklick und beim Ziehen.