Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

VBA-Code richtig darstellen

Begonnen von bungev, Februar 24, 2017, 07:26:56

⏪ vorheriges - nächstes ⏩

bungev

Hallo zusammen,

ich habe mal eine kurze Frage: Habe mir jetzt in den letzten Wochen mal eine Datenbank gebastelt, mit der ich meine ganzen Sub 's und Funktionen verwalten kann. Da kommt ja im Laufe der Zeit so einiges zusammen.

Bei dieser Datenbank habe ich auch versucht, den VBA-Code durch automatisches Einrücken und Leerzeilenbildung übersichtlicher hinzubekommen. Dass ist mir jetzt auch gelungen.

Nun zu meiner Frage: Gibt es eine Möglichkeit, dass man den aktuellen VBA-Code über meine Funktion in die neue Darstellung ändern kann?

Wer schon einmal mit Visual Basic Enterprise (oder ähnlichen) gearbeitet hat, der kennt ja den Editor. Dieser rückt ja schon bei der Eingabe die Zeile entsprechend ein. Da dies ja bei Access nicht geht, suche ich halt eine Möglichkeit, dass zumindestens beim Abspeichern des Codes dieser richtig eingerückt abgespeichert wird.

Vielleicht gibt es ja auch eine Möglichkeit, dass das aktuelle Modul per Tastendruck/-kombination meine Funktion aufruft und somit die Formatierung übernimmt.

Wäre schön, wenn Ihr mir helfen könntet.

Gruß

Volker

Lachtaube

Theoretisch kannst Du, wenn ein Formular oder Bericht die Eigenschaft HasModule gesetzt hat, über das Objekt Module des Formulars/Berichts/Module, bzw. über ein Item der Modules-Auflistung  den VBA-Code des Moduls über diverse Eigenschaften und Methoden (siehe Snapshot des Objektkatalogs im Anhang ) ansprechen und ändern.

Andererseits gibt es aber auch kostenlose VBA-Addins mit der gleichen Funktionalität, denen ich persönlich den Vorzug geben würde. Mir fällt dazu Smart Indenter v3.5 bzw. Rubberduck, das den selben Code wie Smart Indenter für Einrückungen verwendet, ein.
Grüße von der (⌒▽⌒)

PhilS

Zitat von: bungev am Februar 24, 2017, 07:26:56Vielleicht gibt es ja auch eine Möglichkeit, dass das aktuelle Modul per Tastendruck/-kombination meine Funktion aufruft und somit die Formatierung übernimmt.
Neben den von Lachtaube bereits genannten Add-Ins kann ich dir auch noch die MZ-Tools empfehlen. - Nicht kostenlos, aber definitiv ihr Geld mehr als Wert.

Deine Frage passt übrigens genau zu meinen aktuellen Video Tools für die Codeformatierung.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Lachtaube

@Sonic8,

ich würde die Güte eines VBA-Indenters u. a. auch an der Fähigkeit messen (der Smart Indenter scheitert hieran), Ausdrücke wie   Dim i&, j&

   For i = 0 To 9: For j = 0 To 9
      'mach was
   Next j, i
richtig einzurücken.
Grüße von der (⌒▽⌒)

PhilS

Zitat von: Lachtaube am Februar 24, 2017, 09:48:55...Ausdrücke wie   Dim i&, j&

   For i = 0 To 9: For j = 0 To 9
      'mach was
   Next j, i
richtig einzurücken.
Oha! Das ist das absolut erste mal, dass ich eine derartige Formulierung verschachtelter Schleifen sehe.

Das Indent-Feature von MZTools kann damit umgehen. Dennoch würde ich diesen Fall nicht als relevantes Kriterium betrachten.

Ich finde diese Schreibweise nicht gut lesbar und potentiell sehr fehlerträchtig. Intuitiv hätte ich die Reihenfolge von j und i hinter dem Next umgedreht. - Ich habe deinen Code ausführen müssen, um mich davon zu überzeugen, dass es wirklich so herum richtig ist. - Mit etwas nachdenken, ist natürlich klar warum es so richtig ist. - Das Fehlerpotenzial bleibt IMO trotzdem hoch.

Wenn ich das obige in meinen Projekten sehen würde, würde ich einen Code-Quality-Check definieren, der diese Formulierung an sich als Qualitätsmangel beanstandet. - Damit wäre die korrekte Einrückung nicht mehr wirklich relevant.

Aber Danke und Hut ab für das Beispiel! Es kommt nicht mehr oft vor, dass ich VBA-Syntax sehe, die ich noch gar nicht kannte!
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Lachtaube

#5
Ich formuliere meinen Code i.d.R so auch nicht - bei sich wiederholenden Einzeilern (wenn bekannt ist, um was es geht) kommt schon einmal eine Ausnahme vor.
Grüße von der (⌒▽⌒)

Beaker s.a.

Hallo Volker,
ZitatDieser rückt ja schon bei der Eingabe die Zeile entsprechend ein. Da dies ja bei Access nicht geht
Doch, dass kann der VBA-Editor auch (siehe Anlage)
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)

PhilS

Zitat von: Beaker s.a. am Februar 24, 2017, 13:18:21
ZitatDieser rückt ja schon bei der Eingabe die Zeile entsprechend ein. Da dies ja bei Access nicht geht
Doch, dass kann der VBA-Editor auch (siehe Anlage)
Du hast lange nicht mit aktuellen Versionen von Visual Studio gearbeitet.

Der dortige Editor formatiert automatisch so, wie es in VBA von den hier genannten Zusatztools auf Tastendruck gemacht wird.

Der VBA-Editor behält lediglich den manuell erzeugten Einzug bei. - Das Automatisch in der Bezeichnung der entsprechenden Editor-Einstellung finde ich etwas hochtrabend, aber der VBA-Editor ist ja inzwischen schon etwas in die Jahre gekommen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Beaker s.a.

Hallo Phil,
ZitatDu hast lange nicht mit aktuellen Versionen von Visual Studio gearbeitet.
Öh, noch nie; - muss ich mich jetzt schämen?  ;)
ZitatDer VBA-Editor behält lediglich den manuell erzeugten Einzug bei.
Ja, stimmt. Zu spät verstanden, was eigentlich gemeint ist.

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)

bungev

Hallo zusammen,

erst einmal vielen Dank für die reichlichen Antworten und sorry, dass ich mich erst jetzt zurück melde.

Die genannten AddIns habe ich mir zwar noch nicht angesehen, aber was mir aufgefallen ist, das zumindestens Smart Indenter keine Lücken zwischen den einzelnen Zeilen macht (zumindestens bei If, For, Select Case usw. Anweisungen).

Daher würde ich gerne mein eigenes AddIn schreiben.

Jetzt besteht ja "eigentlich nur noch" das Problem, wie kann ich meine Funktion von überall her aufrufen und auf das gerade aktuelle Modul anwenden?

Die Anmerkung von Lachtaube "Theoretisch kannst Du, wenn ein Formular oder Bericht die Eigenschaft HasModule gesetzt hat, über das Objekt Module des Formulars/Berichts/Module, bzw. über ein Item der Modules-Auflistung  den VBA-Code des Moduls über diverse Eigenschaften und Methoden (siehe Snapshot des Objektkatalogs im Anhang ) ansprechen und ändern." hört sich ja schon einmal recht vielversprechend an.

Wäre schön, wenn jemand mir bei meinem Problem helfen könnte.

Vielen Dank

Volker

Josef P.

Hallo!

Wenn du selbst ein Add-In erstellen willst, hast du die Wahl zw. einem Access-Add-In und einem COM-Add-In für den VBA-Editor.
Ein Access-Add-In (ich meine damit die accda/mda-Dateien) kannst du mit Access erstellen. Du musst sie aber starten, um sie verwenden zu können.
Ein COM-Add-In kann automatisch geladen werden und steht dann z. B. über einen Menüeintrag, als Kontextmenü oder interaktiv zur Verfügung.

Falls du ein ähnliches Verhalten wie im Visual-Studio haben willst, wäre vielleicht vbeTwister etwas für dich.

mfg
Josef