Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Was ist falsch an DoCmd?

Begonnen von Doming, Juli 21, 2025, 08:42:54

⏪ vorheriges - nächstes ⏩

Doming

Zitat von: Knobbi38 am Juni 29, 2025, 22:04:14also DoCmd Aufrufe weitestgehend vermeiden, dort wo es möglich ist.
Zitiert aus diesem Post

Hallo,

der Satz schießt mir irgendwie quer, was ist der Nachteil von DoCmd?

Gruß
 Doming

Knobbi38

#1
Hallo Doming,

mit DoCmd rufst du aus der "VBA-Welt" Makroaktionen auf; du wandelst damit zwischen zwei Programmiersystemen, die ein wenig parallel arbeiten. In den meisten Fällen läßt sich eine Makroaktion auch in VBA lösen. Eines der mehr bekannteren Beispiele dazu ist DoCmd.RunSQL, welches relativ einfach in VBA durch CurrentDB.Execute ersetzt werden kann. Es gibt aber auch Ausnahmen, wie z.B. DoCmd.Open... usw., welche nicht vollständig durch VBA ersetzt werden können.

Ein gravierender Nachteil von DoCmd ist, es "wirkt" immer auf das gerade aktive Objekt und innerhalb der gleichen Applikation. Man muß also ständig aufpassen, ob der jeweilige Kontext für DoCmd noch gültig ist.
Das es ausgeschrieben eigentlich Application.DoCmd heißen müßte, wird oft unterschlagen. Zum Beispiel wird oft der Fehler gemacht, daß explizit eine andere DB geöffnet wird und dann sollen mit DoCmd dort Änderungen vorgenommen werden, was natürlich so nicht geht.

Meine Empfehlung ist nach wie vor, daß man DoCmd und "embbeded" Makros, so weit es geht, vermeiden sollte.

Gruß Ulrich

Doming

Danke für die Ausführungen Ulrich, das war mir tatsächlich neu.

Gibt es irgendwo eine Aufstellung der ersetzbaren, bzw. nicht ersetzbaren Kommandos?

Beaker s.a.

Hallo Doming,

Eine Aufstellung kenne ich nicht, - vielleicht die Regulars. Man kann aber an Hand
des Objektmodels eigene Methoden von Objekten suchen, die das gleiche bewirken.
Ein Beispiel fällt mir grade nicht ein, da ich nur (noch) die Open-Methoden des
DoCmd-Objekts verwende.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Knobbi38

Da gibt es schon noch ein paar mehr, welche man nicht so einfach ersetzen kann, z.B. PrintOut, OuputTo, um nur einige zu nennen.

Aber auch das sollte nicht vergessen werden: DoCmd.CancelEvent sollte immer durch VBA ersetzt werden.
Cancel = TrueErstens wird das wahrscheinlich als konstanter Ausdruck in VBA kompiliert und zweitens kann DoCmd.CancelEvent nicht für alle Events angewendet werden. Das ist für Anfänger zunächst nicht so offensichtlich und führt dann zu schwer auffindbaren und sporadischen Fehlern.


Grüße Ulrich