Mit VB.NET auf Excel Makro zugreifen

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von petaod.

    Mit VB.NET auf Excel Makro zugreifen

    Guten Tag liebes Forum,
    Ich stehe vor folgender Frage:
    Besteht die Möglichkeit aus VB.Net ein Excel Makro zu verändern?

    Beispiel:
    Ich habe ein Excel Template, in dem bei jeder Änderung die Schriftfarbe der aktuellen Zelle geändert werden soll. Dies Funktioniert auch mit der nachfolgenden Funktion.

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range) [br]Helfer.ChangeColor Target.Row, Target.Column [br] End Sub


    Problem:
    Die Excel Datei wird von einem Programm geschrieben. Jetzt wird die oben genannte Funktion natürlich jedes mal ausgeführt und jede Zelle ist eingefärbt.

    Gedachter Lösungsansatz:
    Um das Problem zu lösen habe ich daran gedacht ein Flag im Excel zu definieren, das beim schreiben auf einen anderen Status gesetzt wird.


    Ich hoffe meine Problembeschreibung hilft euch meine Frage zu beantworten.

    Mit freundlichen Grüßen
    Chr. Förster
    Wenn das Programm sauber arbeitet, dann selektiert es die Zellen nicht, sondern ändert nur die Inhalte.
    Dann kannst du einfach überprüfen, ob die Änderung auch in der aktiven Zelle passiert ist.

    Visual Basic-Quellcode

    1. Sub Worksheet_Change(ByVal Target As Range)
    2. 'Debug.Print "Change", Target.Address, ActiveCell.Address
    3. If Target.Address = ActiveCell.Address Then
    4. 'ändere die Farbe
    5. End If
    6. End Sub
    Notfalls kannst du entweder im Worksheet_Open-Event die aktive Zelle ins Nirvana setzen oder dir im Worksheet_SelectionChange-Event ein Flag setzen, welche Adresse gerade für Änderungen gültig sind.

    Sollte dein Programm allerdings nach dem Macro-Recorder-Vorbild arbeiten und jede Zelle vor der Änderung selektieren, funktioniert diese Methode nicht.
    Aber da würde ich eher das Programm sauber schreiben, als am Change-Event schrauben
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --