Wie führt man .Onkey Event in einem Excel-Add-In durch, das mit Visual Studio 2010 erstellt wurde?

8

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.

    
Ian 17.04.2012, 14:20
quelle

4 Antworten

5

"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%
  

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.

%Vor%

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%     
Jeremy Thompson 21.04.2012, 07:53
quelle
2

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.

  • Starten Sie Excel und verwenden Sie Datei + Schließen, um die Standardarbeitsmappe
  • zu schließen
  • Klicken Sie auf Datensatzmakro. Ändern Sie die Einstellung "Speichere Makro in" in Persönliche Makro-Arbeitsmappe
  • Klicken Sie auf OK, um das Dialogfeld zu schließen, und klicken Sie auf Aufzeichnung beenden
  • Klicken Sie auf Visual Basic. Beachten Sie, dass Sie jetzt ein VBA-Projekt namens PERSONAL.XLSB mit einem Module1
  • haben

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:

    
Hans Passant 21.04.2012 00:49
quelle
2

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

  1. Speichern Sie den Code als Textdatei OnKeyTest.dna und
  2. Ordnen Sie es einer Kopie der Excel-DNA-Hostbibliothek ExcelDna.xll aus der Version von CodePlex zu, die Sie einfach kopieren und umbenennen Sie zu OnKeyTest.xll (der übereinstimmende Name ist, wie die .dna-Datei gefunden wird, wenn Sie das .xll laden).

Diese beiden Dateien würden Ihr komplettes Add-In bilden und nur .NET auf dem Rechner benötigen.

%Vor%     
Govert 22.04.2012 07:00
quelle
0

Als erstes werden A1, A2, A3 als Zellenadresse betrachtet.

  1. Erstellen Sie eine .xlsm-Datei und fügen Sie diesen VBA-Code hinzu

    %Vor%
  2. 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

    
Kiru 20.04.2012 16:19
quelle