יש כמה דרכים לעשות זאת כאן אכתוב את הבסיס איך לעשות זאת על ידי הוספת קוד vba('רך אחרת תוכלו לראות פה)
אפשר לשכלל את זה כמובן אני רק כותב את הבסיס שאם מישהו יצטרך שלא יתחיל מאפס
- יצירת קלאס ב-C#: בקוד C# יש ליצור class ולהוסיף לו את התג ComVisible(true) כדי לאפשר ל-Microsoft Office לגשת אליו דרך COM. לשם הדוגמה בתוך הקלאס נגדיר פונקציה פשוטה בשם GetNumber שמחזירה את המספר 42.
[ComVisible(true)]
public class MyManagedFunctions
{
public int GetNumber()
{
return 42;
}
}
- קוד עבור ה-startup של התוסף: בקוד ה-C# הוא נכתב תחת אירוע ה-startup של התוסף. בעת ה-startup, הקוד מפעיל את הפונקציה RegisterCallback עם אינסטנס של ה-class שנוצר בצעד הקודם. בנוסף, הקוד מצריך תגובה לאירוע של פתיחת מסמך חדש (DocumentOpen). כאשר מסמך נפתח, הקוד מפעיל פונקציה נוספת (Application_DocumentOpen) בו אפשר לקרוא לקודים של המאקרו דלהלן שאחראיים על חיבור או הסרת הקיצורי מקשים לפונקציה.
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.Application.Run("RegisterCallback", new MyManagedFunctions());
this.Application.DocumentOpen += Application_DocumentOpen;
}
private void Application_DocumentOpen(Microsoft.Office.Interop.Word.Document Doc)
{
//this.Application.Run("AssignShortcut"); // Run the VBA macro to assign the shortcut
//this.Application.Run("RemoveShortcut"); // Run the VBA macro to remove the shortcut
this.Application.DocumentOpen -= Application_DocumentOpen;
}
- קוד בשביל ה-מאקרו VBA: הקוד ב-VBA מגיב לפעולות של המשתמש בתוכניות כמו Word. הוא כולל כמה פונקציות:
RegisterCallback שמקבלת אובייקט ומגדירה אותו למשתנה managedObject,
ו-GetNumberFromVSTO שמפעילה את הפונקציה GetNumber מה-C# ומציגה את התוצאה ב-MessageBox.
יש גם פונקציות להקצאת קיצורי מקלדת (AssignShortcut ו-RemoveShortcut) ופונקציה (RemoveAllShortcuts) להסרת כל הקיצורי מקלדת.
ו- ShowAllShortcutKeys - למקרה ששחכתם מה עשיתם בעבר
Dim managedObject As Object
Public Sub RegisterCallback(callback As Object)
Set managedObject = callback
End Sub
Public Function GetNumberFromVSTO() As Integer
GetNumberFromVSTO = managedObject.GetNumber()
MsgBox "The number is " & GetNumberFromVSTO
End Function
Sub CallVstoFunction()
Call GetNumberFromVSTO
End Sub
Public Sub AssignShortcut()
' Assign Ctrl+Shift+Q to CallVstoFunction
CustomizationContext = NormalTemplate
KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyShift, wdKeyQ), _
KeyCategory:=wdKeyCategoryMacro, _
Command:="CallVstoFunction"
End Sub
Public Sub RemoveShortcut()
' Remove the shortcut key assignment for CallVstoFunction
Dim keyBinding As keyBinding
For Each keyBinding In KeyBindings
If keyBinding.Command = "Normal.Module1.CallVstoFunction" Then
keyBinding.Clear
End If
Next keyBinding
End Sub
Public Sub RemoveAllShortcuts()
' Remove the shortcut key assignment
CustomizationContext = NormalTemplate
KeyBindings.ClearAll
End Sub
Sub ShowAllShortcutKeys()
Dim keyBinding As keyBinding
Dim msg As String
msg = "Currently assigned shortcut keys:" & vbCrLf
For Each keyBinding In Application.KeyBindings
msg = msg & "Command: " & keyBinding.Command & ", Key: " & keyBinding.KeyString & vbCrLf
Next keyBinding
MsgBox msg
End Sub
לפעמים צריך להתחיל את וורד מחדש כדי שהקודים 'ייתפסו'