Fehler beim Einfügen der Validierung in VBA - Excel-Tipps

Inhaltsverzeichnis

Wenn Sie die ersten Kapitel von VBA & Makros für Microsoft Excel gelesen haben, wissen Sie, dass ich mich beschwere, dass der Excel-Makrorecorder nicht die beste Arbeit beim Aufzeichnen von verwendbarem Code leistet. Normalerweise funktioniert der Code einwandfrei, wird jedoch so aufgezeichnet, dass er für Datensätze unterschiedlicher Größe möglicherweise nicht so nützlich ist. Der Code könnte heute gut funktionieren, aber nicht morgen.

Ich stieß auf ein wirklich seltsames Problem, bei dem der Makrorecorder tatsächlich Code aufzeichnete, der nicht funktionierte. Ich habe ein Makro geschrieben, das versucht hat, die Validierung von einer Zelle in einen Zellbereich zu kopieren. In Excel 2002 lautete dieser Code wie folgt:

Range(“E5”).Copy Range(“E6:E12”).PasteSpecial Paste:=xlPasteValidation

Dieser Code funktionierte in Excel 2002 einwandfrei, schlug jedoch auf einem Clientcomputer mit Excel 2000 fehl. Auf einem der alten Computer im Büro ist noch Excel 2000 vorhanden, daher habe ich den Code dort ausprobiert. Das Problem war mit der xlPasteValidation. Immer wenn ich auf etwas Ungewöhnliches stoße, starte ich den Makrorecorder, um zu sehen, wie der Makrorecorder den Code aufzeichnet. Ich habe die Validierung in E5 eingerichtet, den Makrorecorder eingeschaltet, E5 kopiert und Paste Special - Validation verwendet. Nach dem Stoppen des Makrorecorders stellte ich fest, dass Excel 2000 die Konstante wie folgt aufzeichnete:

Range(“E6:E12”).PasteSpecial Paste:=xlDataValidation

Also ging ich zur Client-Anwendung, änderte den Code in xlDataValidation und führte ihn erneut aus. Seltsamerweise hat es den gleichen Fehler erzeugt!

Es stellt sich heraus, dass der Excel 2000-Makrorecorder tatsächlich einen Fehler aufweist. Es wird die Konstante xlDataValidation aufgezeichnet, aber der Makrointerpreter erkennt weder xlDataValidation noch xlPasteValidation. Die Excel VBA-Hilfe in Excel 2000 gibt vor, dass es keine Möglichkeit gibt, nur Validierungen einzufügen.

Damit dies funktioniert, müssen Sie den zugrunde liegenden Wert von xlPasteValidation ermitteln. Auf meinem XL2002-Computer ging ich zum VBA-Editor. Geben Sie Strg + G ein, um das Sofortfenster zu öffnen, und geben Sie dies in das Sofortfenster ein:

Print xlPasteValidation

Drücken Sie die Eingabetaste und Excel 2002 zeigt Ihnen, dass xlPasteValidation eine freundliche Art ist, "6" zu sagen. Zurück auf dem Excel 2000-Computer habe ich diesen Code ausprobiert:

Range(“E6:E12”).PasteSpecial Paste:=6

Zum Glück funktioniert es. Sie sind tatsächlich gezwungen, den zugrunde liegenden Wert anstelle der Konstante zu verwenden. Ich warne vor dieser Praxis im Buch, da das Programm für die nächste Person, die sich den Code ansieht, sehr schwer zu lesen ist. In diesem speziellen Fall haben Sie wirklich keine Wahl. Fügen Sie einen Kommentar hinzu, der erklärt, warum Sie ihn so codiert haben:

‘Bug in XL2000; need to use “6” instead of the constant Range(“E6:E12”).PasteSpecial Paste:=6

Die kleine Lektion heute ist das sehr spezifische Problem beim Einfügen einer speziellen Validierung in Excel 2000, aber die größere Lektion ist die Detektivarbeit, die erforderlich ist, um herauszufinden, was passiert, wenn in Excel VBA etwas Seltsames passiert.

Interessante Beiträge...