Tag Archives: Makrorekorder

I ¤ non ASCII-characters

Letzte Woche in der Excel-VBA-Schulung. Um die Objekte näher zu bringen, beginne ich mit mit dem Makrorekorder. Wir zeichnen eine Reihe Befehle auf. Beispielsweise:

Füge in die Kopfzeile ein Bild ein:

ActiveSheet.PageSetup.RightHeaderPicture.Filename = _
„F:\Eigene Bilder\Bali\PIC00020.jpg“
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = „“
.PrintTitleColumns = „“
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = „“
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = „“
.CenterHeader = „“
.RightHeader = „&G“
.LeftFooter = „“
.CenterFooter = „“
.RightFooter = „“
[…]

Das Ergebnis:

Wir löschen das Bild und führen das Makro erneut aus. Das Ergebnis: nichts! Ein Blick in den Dialog „Seite einrichten“ zeigt jedoch, dass etwas in der Kopfzeile ist. Ein Bild?

Der Grund ist schnell gefunden: Die Zeile:

Application.PrintCommunication = False

„Gibt an, ob die Kommunikation mit dem Drucker aktiviert ist.“ Deshalb wird zwar das Bild eingefügt aber nicht angezeigt. Also: Zeile löschen – und schon funktioniert es. Manchmal (oft!?!) liefert der Makrorekorder eben doch nicht den besten Code …

Übrigens: auf der Microsoft-Seite findet sich folgende Erklärung:

„Legen Sie die PrintCommunication-Eigenschaft auf False fest, um die Ausführung von Code zu beschleunigen, der PageSetup-Eigenschaften festlegt. Legen Sie die PrintCommunication-Eigenschaft auf True fest, nachdem Sie Eigenschaften zum Ausführen eines Commits aller zwischengespeicherten PageSetup-Befehle festgelegt haben.“

Aha!

 

Es gibt Dinge über die rede ich nicht einmal mit mir selbst.

Amüsante Sache heute in der VBA-Schulung:

Ein Teilnehmer fragte mich, warum sein Markorekorder nicht funktioniert. Tatsächlich: Beim Versuch ein Makro aufzuzeichnen kam eine erstaunliche Fehlermeldung:

20161121makro01

Komisch?!

Komisch?!

Zuerst schaute ich nach, ob noch ein Makro läuft. Nein. Alles war okay – das Stoppen brachte nicht den gewünschten Erfolg. Dann sah ich es: in einem Modul war ein fehlerhaftes Makro – wahrscheinlich hatte der Teilnehmer beim Kopieren das Sub – End Sub vergessen.

Übrigens: Trotz Fehlermeldung konnte das Makro aufgezeichnet werden …

20161121makro03

Rekorder kaputt?

Die häufigste Frage in der letzten VBA-Schulung war: Warum funktioniert mein Makrorekorder nicht:

20160629Makro01

Das kann verschiedene Ursachen haben (und ich glaube, meine Teilnehmer haben alle gefunden):

 

In VBA läuft noch ein Programm: Ausschalten!

20160629Makro02

Der Cursor befindet sich in einer Zelle: Raus!

20160629Makro03

Die Arbeitsmappe wurde freigegeben: Aufheben!

20160629Makro04

Der Änderungsmodus wurde eingeschaltet: Aufheben!

20160629Makro05

Das Projekt wurde mit einem Kennwort geschützt: Aufheben!

20160629Makro06

Makrorekorder zeichnet falschen Code auf

Was passiert denn hier? Ich zeichne mit dem Makrorekorder etwas auf, rufe den Befehl auf – und erhalte eine Fehlermeldung.

Die Antwort: Das ist richtig. An einigen (zugegeben, sehr wenigen) Stellen zeichnet Excel falsch auf. Wenn Sie beispielsweise die Datenüberprüfung mit einer Formel aufzeichnen:

Makrorekorder

Makrorekorder

zeichnet Excel folgenden Code auf:

With Selection.Validation
.Delete
.Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, Operator:= _
xlLessEqual, Formula1:=“=TODAY(“
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = „“
.ErrorTitle = „“
.InputMessage = „“
.ErrorMessage = „“
.ShowInput = True
.ShowError = True
End With

Erstaunlicherweise fehlt nach dem TODAY die schließende Klammer.

Oder Sie zeichnen die Formel auf:

=rechts(F2;1)<>“ “

also – verbiete am Ende des Textes ein Leerzeichen.

Der Makrorekorder

Der Makrorekorder

Dann zeichnet der Makrorekorder auf:

.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=“=rechts(F2;1)<>““ „““

Der korrekte Befehl müsste jedoch lauten:

.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=“=right(F2,1)<>““ „““

Also in der US-amerikanischen Schreibweise. Der Makrorekorder schafft die Übersetzung an dieser Stelle leider nicht.

Der Makrorekorder zeichnet nicht auf

Das ist richtig: Eine Dinge werden nicht aufgezeichnet. Beispielweise die Eingabe der Eigenschaften. Wenn Sie diesen Befehl aufzeichnen, erhalten Sie ein leeres Makro:

Der Makrorekorder zeichnet nicht auf!

Der Makrorekorder zeichnet nicht auf!

Sie müssen dann in der Hilfe, im Objektkatalog, im Internet oder in einem guten Buch nachschlagen wie der zugehörige VBA-Befehl lautet.