Tag Archives: Activate

Ich: „Es geht nicht darum, wie häufig du fällst, sondern wie häufig du wieder aufstehst.“ Polizist: „So funktionieren aber Alkoholtests nicht.“

Seltsam. Wenn ich VBA programmiere, verwende ich NIE die Befehle Activate oder Select. Mit zwei Ausnahmen: ich programmiere Spunganweisungen: „wechsle für den Anwender auf ein bestimmtes Blatt oder auf eine bestimmte Zelle“. Oder: am Ende des Programms soll der Cursor auf einem bestimmten Blatt und/oder auf einer bestimmten Zelle sitzen. Ich setze Verweise auf Zellen:

Sub Kopieren_und_Fertig()
     Dim xlZelle As Range
     Dim i As IntegerSet

     Set xlZelle = ActiveSheet.Range("C2")

     For i = 1 To 50
         xlZelle.Copy Destination:=xlZelle.Offset(i, 0)
     Next

     MsgBox "fertig"

Ich starte das Makro von Excel aus:

Was passiert? man siehst nichts:

Auch wenn der Verweis auf ein anderes Tabellenblatt gesetzt wird:

Set xlZelle = ThisWorkbook.Worksheets(2).Range(„C2“)

Für den Befehl Inhalte einfügen sind zwei Zeilen Code nötig:

With xlZelle.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="m,w,d"
End With

For i = 1 To 50
    xlZelle.Copy
    xlZelle.Offset(i, 0).PasteSpecial Paste:=xlPasteValidation
    Application.CutCopyMode = False
Next i

MsgBox "fertig"

Was geschieht hier:

Der Cursor wandert über den Bildschirm.

Ein Zucken ist auch am Bildschirm zu sehen, wenn die Inhalte auf einem anderen Tabellenblatt eingefügt werden:

Set xlZelle = ThisWorkbook.Worksheets(2).Range(„C2“)

Was tun? Klar: Die Bildschirmaktualisierung ausschalten. Dann funktioniert es! nichts zuckt; nichts zeigt sich …

Application.ScreenUpdating = False

Gesucht tot und/oder lebendig: Schrödingers Katze

Heute in der VBA-Schulung in einem chemischen Konzern. Wir üben Makrorekorder: ein benutzerdefiniertes Zahlenformat wird aufgezeichnet:

Eine Teilnehmerin fragte mich, warum Excel „Wasser“ in die Zelle einfügt. Ich habe zwei Mal hinschauen müssen, bis ich entdeckt hatte, dass Sie versehentlich auf die Zelle H20 geklickt hat und dies per Makrorekorder aufgezeichnet hat …

we are not amused

Wirklich erstaunlich. In einer Excel sind mehrere Tabellenblätter ausgeblendet:

ausgeblendete Tabellenblätter

ausgeblendete Tabellenblätter

Die Codezeile:

ActiveWorkbook.Worksheets(„Tabelle4“).Activate

selektiert das letzte Blatt und liefert keinen Fehler.

Auch folgender Sachverhalt ist amüsant und erstaunlich:

Der Teilnehmer der VBA-Schulung wollte die Anzahl der Zeilen eines Bereiches mit:

MsgBox ActiveSheet.Range(„A1“).CurrentRegion.Rows.Count

ermitteln. Statt dessen vertippte er sich und schrieb:

MsgBox ActiveSheet.Range(„A1“).CurrentRegion.Count

CurrentRegion.Count liefert die Anzahl der Zellen des Bereichs. Ich hätte etwas anderes erwartet:

20160628Currentregion