2013-07-12 2 views
0

Я хочу открыть .pdf из события click на кнопке. Я разработал код, но я получаю сообщение об ошибке на этой линии: говоритОткрыть .pdf из командной строки excel

xlsWB = CType(Globals.ThisWorkbook.Application.ActiveWorkbook, Excel.Workbook) 

Ошибка:

  System.InvalidCastException was unhandled by user code 
     HResult = -2147467262 
    Message=Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Tools.Excel.Workbook'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{B74CBB86-9C9F-4172-9AE7-3CE4A7BFA5EB}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)). 
    Source=Compensation Template 
StackTrace: 
     at ExcelWorkbook2.dsbWelcomePage.btnRptEmployeePayToMarket_Click(Object sender, EventArgs e) in F:\Test Environment\Compensation Template\Compensation Template\dsbWelcomePage.vb:line 104 
     at System.Windows.Forms.Control.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
     at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
     at System.Windows.Forms.Control.WndProc(Message& m) 
     at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
     at System.Windows.Forms.Button.WndProc(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
     at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
InnerException 

Это кажется довольно устрашающе. Вот остальная часть моего кода:

Option Explicit On 
Option Strict On 

'Libraries to use 
Imports System.Drawing 
Imports System 
Imports System.IO 
Imports System.Drawing.Printing 
Imports System.Windows.Forms 
Imports Microsoft.Office.Tools 
Imports System.Windows 

Private Sub btnRptEmployeePayToMarket_Click(sender As Object, e As EventArgs) Handles btnRptEmployeePayToMarket.Click 

    Dim xlsWB As Excel.Workbook 
    Dim xlsWBPath As String 


    xlsWB = CType(Globals.ThisWorkbook.Application.ActiveWorkbook, Excel.Workbook) 
    xlsWBPath = xlsWB.Path() 

    xlsWB.FollowHyperlink(xlsWBPath & "\Employee Pay To Ranges.pdf") 

End Sub 

Не совсем уверен, что я делаю неправильно. Это первый раз, когда я пытался открыть файл с пути книги. Я провел некоторое исследование по этому вопросу, но не смог найти ничего, что могло бы мне помочь.

+0

Эта DLL-версия используется в качестве дополнения Excel? –

ответ

1

Вы всегда можете просто сделать

System.Diagnostics.Process.Start(xlsWBPath & "\Employee Pay To Ranges.pdf") 

Это также выглядит, как вы пытаетесь бросить (как в сообщении об ошибке) COM-объект, в данном случае активная книга, в Microsoft.Office.Tools.Excel.Workbook. Я думаю, что ваш Globals.ThisWorkbook.Application.ActiveWorkbook, вероятно, Microsoft.Office.Interop.Excel.Workbook. Вы также работаете в проекте уровня документа для Excel. Так что попробуйте следующее:

Option Explicit On 
Option Strict On 

'Libraries to use 
Imports System.Drawing 
Imports System 
Imports System.IO 
Imports System.Drawing.Printing 
Imports System.Windows.Forms 
Imports Microsoft.Office.Tools 
Imports System.Windows 

Private Sub btnRptEmployeePayToMarket_Click(sender As Object, e As EventArgs) Handles btnRptEmployeePayToMarket.Click 

    Dim xlsWBPath As String = Globals.ThisWorkbook.Application.ActiveWorkbook.Path 

    System.Diagnostics.Process.Start(xlsWBPath & "\Employee Pay To Ranges.pdf") 

End Sub 
+0

Это было, спасибо. –

0

Добавить ссылку управления Microsoft Shell и автоматизации, то вы можете использовать что-то вроде

 Dim myShell As New Shell 
    myShell.ShellExecute pathToPDF  
Смежные вопросы