Service: Visual Studio 2003 bis 2008: Makro: Code Vervielfältigen


Hintergrund

Moderne Entwicklungsumgebungen wie z.B. die aktuelle Version von Microsoft Visual Studio stellen mittlerweile eine hervorragende Unterstützung für routinemässige Programmierarbeiten zur Verfügung. Beispiele:

  • automatisches Einrücken
  • vordefinierte Kontrollschleifen und -blöcke
  • Code-Patterns

Auch moderne Programmiertechniken wie

  • Objektorientierung
  • Vorlagenbasierte Programmierung (Templates bzw. Generics)
vereinfachen und beschleunigen die Arbeit ungemein.

Trotz dieser Unterstützung bleiben Wünsche offen. Ein Beispiel ist jede Art von sich wiederholenden Codessequenzen wie z.B. Deklarationen und Implementierungscode für Klasseneigenschaften (Properties). Betrachten Sie folgendes kurzes Beispiel.

Public Class Foo
    Private myName As String
    Private myAddress As String

    Public Property Name() As String
        Get
            Return myName
        End Get
        Set(ByVal value As String)
            myName = value
        End Set
    End Property

    Public Property Address() As String
        Get
            Return myAddress
        End Get
        Set(ByVal value As String)
            myAddress = value
        End Set
    End Property
End Class

Die Deklarationen und Implementierungen für die Properties unterscheiden sich ausschließlich durch ihre Bezeichner. Ich finde es sehr lästig so etwas 'von Hand' zu machen. Besonders natürlich wenn es um Klassen mit mehr als nur zwei Eigenschaften geht

Geht es nicht auch einfacher?

Es geht einfacher mit meinem Makro DuplicateCodeBlock.

Schreiben Sie z.B. in Ihrem Klassenmodul ein 'Vervielfältigungsmuster' und den Code für das erste Element. Etwa so:

    'D:Name
    'D:Address
    Private myName As String

Markieren Sie die drei Zeilen, führen Sie den Makro aus und heraus kommt:

    'D:Name
    'D:Address
    Private myName As String
    Private myAddress As String

oder:

    'D:Name;String
    'D:Address;String
    'D:Birth;Date
    Private myName As String

ergibt:

    'D:Name;String
    'D:Address;String
    'D:Birth;Date
    Private myName As String
    Private myAddress As String
    Private myBirth As Date

oder auch:

    'D:Name;String
    'D:Address;String
    'D:Birth;Date
    Public Property Name() As String
        Get
            Return myName
        End Get
        Set(ByVal value As String)
            myName = value
        End Set
    End Property

ergibt:

    'D:Name;String
    'D:Address;String
    'D:Birth:Date
    Public Property Name() As String
        Get
            Return myName
        End Get
        Set(ByVal value As String)
            myName = value
        End Set
    End Property
    Public Property Address() As String
        Get
            Return myAddress
        End Get
        Set(ByVal value As String)
            myAddress = value
        End Set
    End Property
    Public Property Birth() As Date
        Get
            Return myBirth
        End Get
        Set(ByVal value As Date)
            myBirth = value
        End Set
    End Property

Ebenso gut C++:

    //D:Name;CString
    //D:Address;CString
    //D:Income;double
    CString m_Name;

ergibt:

    //D:Name;CString
    //D:Address;CString
    //D:Income;double
    CString m_Name;
    CString m_Address;
    double m_Income;

Anmerkungen

  • Wie Sie an den Beispielen sehen, bleiben die Vervielfältigungsmuster nach dem Vervielfältigen erhalten
  • Damit können Fehlerberichtigungen und/oder Ergänzungen leicht hinzugefügt werden.
    • Allen Code außer für das erste Element löschen (also den Muster-Code behalten)
    • Vervielfältigungsmuster korrigieren und/oder ergänzen
    • Den Makro erneut ausführen
  • Die Vervielfältigungsmuster können beliebig viele Ersetzungszeichenketten enthalten
    • Einzelne Ersetzungszeichenketten müssen durch Semikolons getrennt sein
    • In jeder Zeile mit Vervielfältigungsmustern müssen jedoch gleich viele durch Semikolon getrennte Ersetzungszeichenketten enthalten sein.

Dazu noch ein Beispiel für ein Muster mit drei Ersetzungszeichenketten je Zeile:

    //D:Name;CString;Surname
    //D:Address;CString;Addr
    CString sName = GetSurName();

liefert:

    //D:Name;CString;Surname
    //D:Address;CString;Addr
    CString sName = GetSurName();
    CString sAdrress = GetSurAddr();


Besucher dieser Seite interessieren sich oft auch für meine C/C++ Tipps.

Seitenanfang

Kontaktaufnahme- und Terminvereinbarung:

Bei Fragen und für Terminvereinbarungen erreichen Sie uns unter:

0 63 49 99 07 38

0 151 51 95 34 00

Oder nutzen Sie das Kontaktformular




Ihr Ansprechpartner:


Hier sollte das Fahnungsfoto zu sehen sein.

Ralf Kunsmann

Spezialist für VBA-Programmierung
(alle Office-Anwendungen)
Entwickler der
VBA-Extension-Tools