dbnex14 dbnex14 - 1 year ago 70
C# Question

Outlook VSTO - Calling TypeText on Selection throws "This command is not available" Exception


throws "This command is not available." exception

enter image description here

Below is my code

public void AddFilePaths(List<string> urls)
if (urls.Count > 0)
MailItem mi = null;
bool newMailItem = false;

mi = MyAddIn.Application.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
mi.Body = "New email body";
newMailItem = true;

inspector = MyAddIn.Application.ActiveInspector();

if (mi != null)
foreach (var url in urls)

public void AddLinkToCurrentInspector(string url)
var inspector = MyAddIn.Application.ActiveInspector();
var currMessage = inspector.CurrentItem;
Microsoft.Office.Interop.Word.Document word = currMessage.GetInspector.WordEditor;
dynamic wordapp = word.Application;
const string text = "\n"; // thisfor some reason will not add new line
Microsoft.Office.Interop.Word.Selection sel = word.Windows[1].Selection;
sel.TypeText(text); // this often errors
string address = url;
string subAddress = "";
string screenTip = "";
string textToDisplay = url;
wordapp.ActiveDocument.Hyperlinks.Add(sel.Range, ref address, ref subAddress, ref screenTip, ref textToDisplay);
if (word.ProtectionType != Microsoft.Office.Interop.Word.WdProtectionType.wdNoProtection) word.Unprotect();
sel.TypeText(" ");

Answer Source

Based on answer in this question, I also resolved this issue. The code that works better than code above and is more easy to follow is below. Many thanks to @joeshwa:

    public void AddLinkToCurrentInspector(string url)
        object link = url;
        object result = "url";
        object missing = Type.Missing;

        var inspector = MyAddIn.Application.ActiveInspector();
        MailItem currMessage = inspector.CurrentItem;
        Microsoft.Office.Interop.Word.Document doc = currMessage.GetInspector.WordEditor;
        Microsoft.Office.Interop.Word.Selection sel = doc.Windows[1].Selection;
        doc.Hyperlinks.Add(sel.Range, ref result, ref missing, ref missing, ref link, ref missing);