Wie Sie ausführen .Onkey-Ereignis in ein Excel-Add-In erstellt mit Visual Studio 2010?
Ich bin erstellen Sie ein Excel-Add-In mit Visual Studio 2010. Ich möchte ausführen von code, wenn Benutzer klickt auf eine Kombination von Tasten.
Hier ist der code ich habe
Public Class CC
Private Sub ThisAddIn_Startup() Handles Me.Startup
EnableShortCut()
End Sub
Sub A1()
MsgBox "A1"
End Sub
Sub A2()
MsgBox "A2"
End Sub
Sub A3()
MsgBox "A3"
End Sub
Public Sub EnableShortCut()
With Application
.OnKey "+^{U}", "A1" 'action A1 should be performed when user clicks Ctrl + Shift + U
.OnKey "+^{L}", "A2" 'action A2 should be performed when user clicks Ctrl + Shift + L
.OnKey "+^{P}", "A3" 'action A3 should be performed when user clicks Ctrl + Shift + P
End With
End Sub
End Class
Den Add-In, wenn installiert, erscheint eine Fehlermeldung beim Klick auf den short cuts. Es sagt die spezifischen makro kann nicht gefunden werden.
Den code unter den Sub EnableShortCut()
funktioniert gut, wenn es in ein excel-vba-Modul. Das gleiche wird nicht funktionieren, wenn es Hinzugefügt wird, um ein Excel-Add-In erstellt mit Visual Studio.
Jemand da draußen, bitte helft mir dieses Problem zu beheben.
- Bitte siehe msdn.microsoft.com/en-us/library/bb608614.aspx
- vielen Dank für Ihre Antwort, aber das ist nur die Grundlagen. Der code hier funktioniert. Ich möchte nur wissen, wie zu handhaben die .Onkey-Ereignis.
- Ah Ok 🙂 AFAIK und ich könnte hier falsch sein, Sie können nicht
.Onkey
mag das, weil das Add-In wird suchen dieA1
in der aktuellen Arbeitsmappe, dieThisWorkbook
. Lassen Sie mich Forschung, bevor ich kann dies bestätigen. - du hast Recht. Aber ich bin auf der Suche nach einem workaround für dieses. Wenn Sie etwas über diese, wäre das wirklich hilfreich.
- In diesem Fall ist die einzige alternative, die ich mir vorstellen kann ist das anlegen eines extra-addin (xla/xlam), die hat alle Ihre drei subs drin und dann im installer von Ihren oben genannten add-in, 2. installieren Sie dieses Add-In. Habe es gerade getestet und es hat funktioniert.
- Ich werde versuchen, und lassen Sie wissen.
- Versuchen Sie, diese zu binden Tastenkombination Globals.ThisAddIn.- Anwendung.KeyBindings.Add(WdKeyCategory.wdKeyCategoryCommand, "A1", Globals.ThisAddIn.- Anwendung.BuildKeyCode(WdKey.wdKeyControl, WdKey.wdKeyShift, WdKey. wdKeyU));
- Freund-Anwendung.Tastaturbelegung ist nicht identifiziert, die von visual studio.
- Meine schlecht, das ist nicht verfügbar in Excel nur für Word.
I will try that and will let you know. – Ian Apr 18 at 13:56
?- Nicht dagegen, mein Kopfgeld. War nur etwas testen.
- wie haben Sie das gemacht? ein Kopfgeld auf eine bestehende bounty Frage geantwortet? Ich kann nicht setzen Sie ein Kopfgeld auf diesen einen, noch kann ich eine auf Ihre: img846.imageshack.us/img846/5648/cantaddbounty.png
- Es sollte direkt unter den Kommentar-Abschnitt. Hier ist ein screenshot von mir von einer Ihr antwortete, dass gewonnen bounty: i47.tinypic.com/w7dhy1.png
- Und für ein geeky Ansatz: Gehen Sie auf meine Frage und betrachten Sie die Quelle der Seite. Suchen Sie für eine variable namens 'canOpenBounty' und überprüfen Sie seinen Wert: "i47.tinypic.com/5ci169.png
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Ich möchte ausführen von code, wenn der Benutzer drückt eine Tastenkombination."
Seiner trickreichen und es tun ohne externe Abhängigkeiten resort Tastatur anschließen um es zu erreichen, mit einem VSTO Excel-Add-in:
Müssen Sie fügen Sie code in die HookCallback () - Methode in der oben genannten code, um trap-Ereignissen, wenn Tastenkombinationen gedrückt werden, ich habe Ihnen zwei Beispiele Strg + Shift + 7 und Strg + 7, um Sie gehen.
Dann in Ihre Excel-Add-in wire es:
Und vergessen Sie nicht, um es zu deaktivieren, wenn Sie fertig sind:
Mit Excel-DNA (ein open-source -.NETTO - /Excel-integration-Bibliothek, die ich entwickeln) die Methoden und Benutzer-definierte Funktionen in Ihre .NET-code registriert mit Excel über die C-API. Als Ergebnis wird das Verhalten näher an der VBA und den code mit der Anwendung.OnKey "..." strings funktionieren würde, auch.
Excel-DNA den code in einer kompilierten .NET .dll-assembly oder direkt als text in einem".dna-Datei, die verarbeitet wird, wenn Sie das add-in laden. Hier ist ein Beispiel einer solchen text Datei (der code würde gleich Aussehen, wenn es in einem kompilierten Projekt). Wie bereits in einer der anderen Antworten habe ich umbenannt, die Makros, damit Ihre Namen nicht in Konflikt geraten mit den zellennamen A1 etc.
Um ein add-in
Diese beiden Datei-Formular Ihre vollständige add-in, die einfach nur brauchen .NET auf die Maschine zu laufen.
Dies ist schwer zu tun, die Anwendung.OnKey () - Methode ist nur sehr eingeschränkt möglich. Es kann nur ein makro aufrufen und kann nicht passieren keine Argumente. Was bedeutet, dass Sie haben, um eine Reihe von Makros. Sie wollen nicht-Arbeitsmappe spezifisch, müssen Sie Makros, die die Arbeit in einem Dokument. Wir lösen das erste.
Löschen Makro1 und kopieren/einfügen von VBA-code:
Wiederholen Sie so oft wie nötig, man will für jede Tastenkombination, die Sie definieren möchten. Klicken Sie Auf Speichern. Sie jetzt eine Datei erstellt in c:\users\yourname\appdata\roaming\microsoft\excel\xlstart\personal.xlsb dass die Makros enthält. Jeder, der geht, um die Erweiterung nutzen haben muss, um diese Datei als gut, eine Implementierung detail.
Nächste, was Sie tun müssen, ist setzen Sie Ihre Befehle. Der Sub A1() schrieb Sie in der add-in nicht tun wird, das Verfahren ausgesetzt werden müssen, da die Methoden einer COM-Klasse sichtbar. Fügen Sie eine neue Klasse zum Projekt und den code so Aussehen:
Nur eine einfache eine, die macht einer einzigen Methode namens Command (), das dauert eine ganze Zahl. Ich bin nur verwendet MsgBox, Sie werden wollen, schreiben Sie eine Select-Anweisung zu implementieren, die den Befehl basierend auf dem Wert von index. Beachten Sie auch die übereinstimmung mit dem code in der global-macro.
Eine weitere Sache, die Sie tun müssen, Sie müssen bewirken, dass diese Klasse explizit. Überschreiben Sie die RequestComAddInAutomationService-Funktion in Ihrem add-in. Die, die ich verwendet, um zu testen, das sah so aus:
Drücken Sie F5, um kompilieren und starten Sie Excel. Wenn ich die Tastenkombination Strg+Shift+U bekomme ich diese:
Erste, was A1, A2, A3 sind als Zell-Adresse.
Erstellen .xlsm Datei und fügen Sie diese VBA-code
Erstellen Sie nun eine Excel-Arbeitsmappe-Projekt in Visual studio und fügen Sie vorhandene Datei und wählen Sie die oben erstellte .xlsm Datei
Führen Sie Ihr Projekt das funktionieren sollte, Anwendung.OnKey in Excel oder Application.Tastenkombinationen in Word nimmt den Macro-Namen als parameter.
Überprüfen Sie meine Antwort für die Verwendung von Tastenkombinationen in Word hier