我想从按钮上的点击事件中打开.pdf。我制定了代码,但是我在这一行上收到了错误:
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 :(得分: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
答案 1 :(得分:0)
添加对Microsoft Shell Controls和Automation的引用,然后您可以使用类似
的内容 Dim myShell As New Shell
myShell.ShellExecute pathToPDF