Excel interop prevent showing password dialog

Do not use Nothing for method arguments you do not want to supply.

Instead of:

m_xlWrkb = m_xlWrkbs.Open(strFile, Nothing, Nothing, Nothing, "", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing)

use any of the following:

m_xlWrkb = m_xlWrkbs.Open(strFile, Password:="")

or

m_xlWrkb = m_xlWrkbs.Open(strFile, , , , "", , , , , , , , , , )

or

Dim missing As System.Reflection.Missing = System.Reflection.Missing.Value
m_xlWrkb = m_xlWrkbs.Open(strFile,missing, missing, missing, "", missing, missing, missing, missing, missing, missing, missing, missing, missing, missing)

If the Workbook is password protected, doing this will cause a COMException to be thrown with a message of:

"The password you supplied is not correct. Verify that the CAPS LOCK key is off and be sure to use the correct capitalization."

If the Workbook is not password protected, no exception will be thrown assuming the file is accessible.

You can also define the "missing" object shown above like this:

Dim missing As Object = Type.Missing

Type.Missing and System.Reflection.Missing refer to the same object.


I found a solution, but i will accept other working answers

Problem

When passing an empty string as password the excel consider it as nothing. So it ask for a password and show the dialog.

Solution

The solution is to pass a single quotation as a password, excel will consider it as empty string. If workbook is not password protected it will open, else it will throw the following exception

The password you supplied is not correct. Verify that the CAPS LOCK key is off and be sure to use the correct capitalization

The code will be:

m_xlWrkb = m_xlWrkbs.Open(strFile, Password:="'")

Note

In microsoft excel, single quotation on the beginning of a value is used to force text formatting.

example; '0 is readed as a text of value 0