Ich erstelle ein Excel-Add-In mit Visual Studio 2010. Ich möchte Code ausführen, wenn Benutzer auf eine Kombination von Schlüsseln klicken.
Hier ist der Code, den ich habe
%Vor% Das Add-In nach der Installation zeigt einen Fehler beim Klicken auf die Abkürzungen. Es besagt, dass das bestimmte Makro nicht gefunden werden kann.
Der Code unter Sub EnableShortCut()
funktioniert gut, wenn er sich in einem Excel VBA-Modul befindet. Das Gleiche funktioniert nicht, wenn es einem mit Visual Studio erstellten Excel-Add-In hinzugefügt wird.
Jemand da draußen bitte helfen Sie mir, dieses Problem zu lösen.
"Ich möchte Code ausführen, wenn Benutzer eine Kombination von Tasten drücken."
Es ist schwierig, dies ohne externe Abhängigkeiten zu tun, um das Keyboard-Hooking mit einem VSTO-Excel-Add-In zu erreichen:
%Vor%%Vor%C # version - das Original, dass der obige vb.net-Code konvertiert wurde von - aber ich musste Reflector als CodeConverter & amp; Devfusion nicht mach es richtig.
Sie müssen Code in die HookCallback () -Methode im obigen Code einfügen, um Ereignisse zu erfassen, wenn Tastenkombinationen gedrückt werden. Ich habe Ihnen zwei Beispiele gegeben, Strg + Shift + 7 und Strg + 7, um zu erhalten gehst du.
Dann in Ihrem Excel AddIn verdrahten Sie es:
%Vor%Und vergessen Sie nicht, es zu deaktivieren, wenn Sie fertig sind:
%Vor%Dies ist schwierig, die Application.OnKey () -Methode ist sehr eingeschränkt. Es kann nur ein Makro aufrufen und keine Argumente übergeben. Das bedeutet, dass Sie angeben müssen, um eine Reihe von Makros bereitzustellen. Sie möchten keine arbeitsmappenspezifischen, sondern Makros, die in jedem Dokument funktionieren. Lass uns das zuerst angehen.
Löschen Sie Macro1 und kopieren / fügen Sie diesen VBA-Code ein:
%Vor%Wiederholen Sie dies so oft wie nötig, Sie möchten einen für jede Tastenkombination, die Sie definieren möchten. Klicken Sie auf Speichern. Sie haben jetzt eine Datei in c: \ Benutzer \ Benutzername \ AppData \ Roaming \ Microsoft \ Excel \ XlStart \ Personal.xlsb erstellt, die die Makros enthält. Jeder, der Ihre Erweiterung verwenden wird, muss diese Datei ebenfalls haben, ein Deployment-Detail.
Als nächstes müssen Sie Ihre Befehle anzeigen. Das Sub A1 (), das Sie in dem Add-in geschrieben haben, wird nicht ausgeführt, die Methoden müssen als Methoden einer sichtbaren COM-Klasse verfügbar gemacht werden. Fügen Sie Ihrem Projekt eine neue Klasse hinzu und lassen Sie den Code folgendermaßen aussehen:
%Vor%Nur eine einfache Methode, die eine einzelne Methode namens Command () zur Verfügung stellt, die eine Ganzzahl verwendet. Ich benutze nur MsgBox, Sie sollten eine Select-Anweisung schreiben, um den Befehl basierend auf dem Wert von index zu implementieren. Beachten Sie auch die Übereinstimmung mit dem Code im globalen Makro.
Noch eine Sache, die Sie tun müssen, Sie müssen diese Klasse explizit verfügbar machen. Überschreiben Sie die RequestComAddInAutomationService-Funktion in Ihrem Add-In. Der, den ich zum Testen benutzte, sah so aus:
%Vor%Drücken Sie F5, um Excel zu kompilieren und zu starten. Wenn ich Strg + Umschalt + U drücke, bekomme ich Folgendes:
Excel-DNA (eine Open-Source-.NET / Excel-Integrationsbibliothek, die ich entwickle) die Methoden und benutzerdefinierte Funktionen in Ihrem .NET-Code sind in Excel über die C-API registriert. Als Ergebnis ist das Verhalten näher an dem von VBA, und Ihr Code mit den Application.OnKey "..." - Strings würde auch funktionieren.
Excel-DNA ermöglicht, dass sich Ihr Code in einer kompilierten .dll-.NET-Assembly oder direkt als Text in einer '.dna'-Datei befindet, die beim Laden des Add-Ins verarbeitet wird. Hier ist ein Beispiel für eine solche Textdatei (der Code würde genauso aussehen, wenn er in einem kompilierten Projekt wäre). Wie in einer der anderen Antworten erwähnt, habe ich die Makros umbenannt, so dass ihre Namen nicht mit den Zellnamen A1 usw. kollidieren.
So erstellen Sie ein Add-In
Diese beiden Dateien würden Ihr komplettes Add-In bilden und nur .NET auf dem Rechner benötigen.
%Vor%Als erstes werden A1, A2, A3 als Zellenadresse betrachtet.
Erstellen Sie eine .xlsm-Datei und fügen Sie diesen VBA-Code hinzu
%Vor%Erstellen Sie jetzt ein Excel-Arbeitsmappe-Projekt in Visual Studio, fügen Sie eine vorhandene Datei hinzu und wählen Sie die oben erstellte .xlsm-Datei
aus %Vor%Führen Sie Ihr Projekt aus, dies sollte funktionieren, Application.OnKey in Excel oder Application.TheThreads in Word verwendet den Makroname als Parameter.
Überprüfen Sie meine Antwort für die Verwendung von Tastenkombinationen in Word hier
Tags und Links visual-studio excel vsto vb.net excel-addins