Excel process thread hiJacks KeyBoard strokes - vsto

We have a Developed a VSTO Add-In (Excel Add-In) Application with couple of Buttons in the Ribbon.
On Starting/launching the Application, It launches excel Instance. On the Button Click We are instantiating the WPF window having some Input Textboxes for the user to Enter the Values.
The Issue here is When we try to type in the Textboxes, It types it in the Excel window.
The Wpf window runs under the same process of the Add-In which is (Excel Process).
could you please suggest a solution foe this issue.
THANKS
Amol

I'd suggest running a Windows form instead. Or you can try to place your WPF controls on the Windows form. Does it work as expected?

Related

Tab stops in windows form in Office VSTO addin don't work

I'm writing a simple VSTO add-in for Office. When the user clicks a button a single form appears, and on the form there are some single-line textboxes, some buttons and some labels. This is all in VB.NET.
Everything works as expected - except I cannot tab between controls on the form. I have set the TabIndex and TabStop properties (actually, left them at defaults, which look OK). I've also tried programmatically setting TabIndex and TabStop in the form's Shown handler - but this made no difference. Changing runtime from .NET 4.5 to 4.6 makes no difference.
The odd thing is that if I use exactly the same form (copy & paste the .vb file) in a Windows Forms App, the tab stops work. It seems there's something about this VSTO project (or perhaps all VSTO projects) that is stopping tabbing working.
I am using Visual Studio 2017 and the host application for the VSTO addin is MS Project 2016.
The difference between a standalone WinForms application and your Office add-in is the host application (can be MDI or SDI application).
Most probably you need to specify the parent window handle to the Show method. The method accepts an instance of the IWin32Window interface which represents the top-level window that will own this form.

How to programmatically add a button to my windows form, which will open a macro on click?

I have a macro file. I want to add a button in a windows form of my application, on click of which this macro file will open, so that the user can run the macro by themselves. Has anybody come across similar coding scenario who can guide with some code? I am using vb.net.
Button1_Click
Process.Start(Macro Location)
If you can compile the macro, you can run it as an exe, so you don't have to boot the IDE to run it.

Launching VBA Applications blocks working with and opening other workbooks

I developed a vba application in excel for a company, They wants to leave it open the whole day until the end of work hours, while working normally on other excel workbooks.
The application is working just fine, no problem with the code.
My problem is that when the application is launched .. it blocks the other opened workbooks (I can't select cells or do anything).
And also If I try to open a sample excel file while the application is launched, it won't open.
(I tried with a simple userform and still the same problem, so the problem doesn't have anything to do with my application)
Is this something normal in Microsoft Excel, because I can't find anything on the net that is similar to my problem ?
Thanks in advance ..
Sounds as though you have a userform displayed modally (which is the default way of displaying a form). If you need to have the form displayed all the time you can display it modeless, but note that this does not work well with Excl's SDI implementation: you have to use Windows API calls to keep the form from being hidden. see http://www.jkp-ads.com/Articles/keepuserformontop01.asp
Alternatively you could change the design to use a ribbon command to display the form only when needed.

Word Add-in - find if dialog has focus?

I am writing a word add-in in VB .NET (using Add-in Express, but I don't think that's relevant).
I have created shortcuts, but I only want them to take effect if the document itself is in focus, not a dialog - for example, "Find and replace" or any other.
How do I determine if a dialog has focus?
The "Selection" property of the application points to the selection in the document, even if a dialog is currently selected. I can't find any "HasFocus"-equivalent property anywhere either. I'm running out of ideas :o)
Thanks!
This workaround worked for me:
My add-in keeps a reference to the handle of the most recently activated Word window, by using the GetActiveWindow API during the WindowActivate event of the Word application. This is necessary since, up until Office 2013, the Window object does not expose a handle property.
When a shortcut is triggered, I compare that to the handle of the currently active window, using the same API. If they don't match, I simply don't proceed :o)

How to set Focus and Modal way on a Winform/WPF Application hosted in VSTO Excel 2003 Add-in?

I have 2 questions :
1) In my VSTO Add-in, I created a button. When clicked, it starts a STA thread, launching a WPF Window (which is in fact my real application).
The application is treating Excel Data, sending them to Web services, etc etc.
At a particularly moment, I call :
System.Diagnostics.Process.Start(filePath);
the path is like "C:\file.xls". Indeed, it opens an Excel file.
The problem is that the focus is beeing made on this file instead of remaining the focus on my WPF window.
I tried to set the focus to the Current process, but since the new file opened and my WPF Window are hosted in the same Excel process, it didn't solve the problem at all...
Any idea ?
2) As you can see, as my WPF application is launched in a thread, even using a modal dialog, I can still modify the excel file in background... which is not what I want at all...
How to fix this, blocking the excel file in background ? Is it possible to do this using the Workbook COM object that I can control ?
Ok I solved my problem not using a thread.
I launch my application directly in the VSTA_Main thread (the Add-in thread), causing a freeze on my button...
Since it's not another thread, my entire process in blocking.
For the second question, I launched another Excel process like that :
ProcessStartInfo info = new ProcessStartInfo("Excel.exe",filePath);
Process.Start(info);
I still have a little bug with the generation of the Excel file, but still solved my principal problem.