Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen

C# Code für VBA verfügbar machen

Betrifft: C# Code für VBA verfügbar machen von: Esther Jo
Geschrieben am: 10.10.2020 20:29:34

Hallo liebes Forum,

vielleicht könnt ihr mir weiterhelfen. Ich habe einen Code für diverse Funktionen in C#. Jetzt soll dieser aber auf einen System verfügbar gemacht werden, wo alles am besten in VBA (für eine Excel) plaziert ist. Insbesondere da der C# Code ja eher für Fortgeschrittene ist und ich gerne in dem firmeninternen System alles in VBA haben will.

Vermutlich ist das ein gewisser Rückschritt, aber ich bin einfach nicht fit in C# und in VBA fange ich gerade erst an.

Falls ihr da irgendwie Ideen für Konvertierung, Add-Ons usw. habt. Würde mich sehr über Hilfe freuen.

Falls ihr sagt, dass ist doch Quatsch, weil... auch hilfreich für mich. Oder ihr sagt, es gibt Leute, die schreiben dir schnell den Code um von C# in VBA.

Gruß Esther

Betrifft: AW: schwierige Antwort
von: Fennek
Geschrieben am: 11.10.2020 09:58:58

Hallo,

gestern habe ich ein Beispiel gefunden, imdem mit VBA zuerst ein Powershell-Code und damit dann ein C#-Code gestartet wurde.

Es ist also möglich, aber ich muss mir noch überlegen ob und wie ich das kommunizieren möchte. Der Code stammt aus einer der bakannten Viren-Familien.

Es würde mich motivieren dir zu antworten, wenn du ein paar für mich offene Frage beantwortest:

- was ist der Vorteil für malware Autoren mit so einer (unnötig?) komplizierten Konstrktion
- wird C# weniger geloggt als Powershell

mfg

(Ich hoffe, dass andere hier im Forum Stellung beziehen, ob hier aus Viren zitiert werden sollte)

Betrifft: AW: schwierige Antwort
von: Zwenn
Geschrieben am: 11.10.2020 11:16:32

Hallo Fennek,

das Aufrufen von Code, der in anderen Programmiersprachen entwickelt wurde, wird öfter nachgefragt. Ich lese davon zumeist im Zusammenhang mit Python. Das ist also per se erstmal nix böses.

Viele Grüße,

Zwenn

Betrifft: AW: Python ist einfach
von: Fennek
Geschrieben am: 11.10.2020 12:56:47

Hallo,

mein AV-Programm blockiert zwar "set WSh = CreateObject("WScript.Shell"), aber ein "Shell Python test.py" geht ohne Probleme.

Was mich ärgert: Wenn die AV schon bestimmte Aufrufe blockt, warum nicht den Code des bekanntesten aller Makro-Viren "Emotet".

mfg

(der Aufrauf von C# über Powershell ist ziemlich "obfuscated" und damit nicht einfach zu kommunizieren. Natürlich habe ich das "IEX" uä entfernt)

Betrifft: AW: C# Code für VBA verfügbar machen
von: Zwenn
Geschrieben am: 11.10.2020 11:13:36

Hallo Esther,

selbst habe ich das noch nie gemacht und kann auch kein C# programmieren. Aber Microsoft erklärt hier, wie man C# Methoden aus VBA heraus aufrufen kann:
https://docs.microsoft.com/de-de/visualstudio/vsto/walkthrough-calling-code-from-vba-in-a-visual-csharp-project?view=vs-2019

Das sieht mir relativ aufwändig aus. Vor allem, wenn Du nicht nur ein paar Methoden hast. Falls Du das testen möchtest, würde ich auch als erstes mittesten, ob sich so ein Projekt hinterher so in der ganzen Firma ausrollen lässt, wie es benötigt wird. Sprich, läuft das dann einfach auf anderen Rechnern oder muss da auch ein gewisser Aufwand betrieben werden?

Mir stellt sich bei Deinem Vorhaben vor allem die Frage, was macht der C# Code denn? In Excel wird VBA ja eigentlich dafür verwendet Abläufe innerhalb von Excel zu automatisieren. Dein C# Code dürfte aber völlig unabhängig von Excel sein.

Pauschal kann man schlecht eine Aussage darüber treffen, ob Dein Gedankengang sinnvoll ist oder nicht denke ich. Dafür müsste man wissen, was der C# Code macht, wie umfangreich er ist und warum Du meinst, die Codebasis in VBA einzubinden sei sinnvoll, sich also immer auch Excel für die Ausführung eines (eigentlich?) Excel-Unabhängigegn Codes, ans Bein zu binden. Weiterhin würde ich im Vorfeld auch versuchen in Erfahrung zu bringen, ob es Auswirkungen bei künftigen Versionswechseln von Excel geben kann.

Während so einer Erörterung tauchen sicher weitere Fragen auf. Am Ende ist es eine Analyse über Aufwand und Nutzen (Vor- und Nachteile).

Viele Grüße,

Zwenn

Betrifft: Hatte erst den ersten Kaffee
von: Zwenn
Geschrieben am: 11.10.2020 11:23:23

Hallo noch einmal,

ich glaube, MS beschreibt unter der Verlinkung den Weg, wie man VBA aus C# heraus aufruft. Also genau falsch herum. Ohne jetzt tiefer gebohrt zu haben (Fennek weiß vielleicht mehr dazu), ist man hier der Meinung, dass der Aufruf von C# Methoden aus VBA heraus so ohne weiteres nicht möglich ist. Der Thread ist allerdings schon 10 Jahre alt:
https://stackoverflow.com/questions/3634126/can-we-write-a-macro-in-c-sharp-for-excel

Viele Grüße,

Zwenn

Betrifft: Beim zweiten Kaffee gefunden
von: Zwenn
Geschrieben am: 11.10.2020 11:47:50

Wird hier eher so eine Recherche-Doku ;-)

Habe jetzt nochmal etwas weiter recherchiert. Du kannst mal einen Blick auf dieses Projekt werfen, vielleicht hilft Dir das weiter. Die Entwicklung begann 2011, also nach dem zuletzt verlinkten Thread:
https://www.codeproject.com/Articles/229280/Office-Programming-Helper-Indent-VB-Code

Ich habe damit nix ausprobiert, nehme aber an, dass sich damit nicht nur die Beispiele in VBA ausführen lassen, sondern auch eigener C# Code. Das folgere ich aus diesem Abschnitt:
Points of Interest
How to Write a VBA Addin

    Create a new class library project that uses v2 of .NET Framework and ComVisible
    The add in needs either PIA or Visual Studio Tools for Office
    Add the following references:
        System
        System.Windows.Forms
        Extensibility = Microsoft Add-In Designer
        Microsoft.Vbe.Interop
        Microsoft.Office.Core
    Add a class that Implements IDTExtensibility2
    Write your code in C# or VB: 
Bei meinen Sichtungen ist mir Interop nun öfter begegnet. Vielleicht ist das sinnvoll für weitere Rechercheansätze deinerseits.

Viele Grüße,

Zwenn