我从这个微软页面获得了以下代码。
https://msdn.microsoft.com/en-us/library/e9waz863(v=vs.90).aspx
' Add Option Strict Off to the top of your program.
Option Strict Off
Private Sub getExcel()
Dim fileName As String = "c:\vb\test.xls"
If Not My.Computer.FileSystem.FileExists(fileName) Then
MsgBox(fileName & " does not exist")
Exit Sub
End If
' Set the object variable to refer to the file you want to use.
Dim excelObj As Object = GetObject(fileName)
' Show Excel through its Application property.
excelObj.Application.Visible = True
' Show the window containing the file.
Dim winCount As Integer = excelObj.Parent.Windows.Count()
excelObj.Parent.Windows(winCount).Visible = True
' Insert additional code to manipulate the test.xls file here.
' ...
excelObj = Nothing
End Sub
Option Strict Off
时,一切都很好Option Strict On
时,一切都不好那么,当Option Strict On?
时如何解决这些错误小心!我想从同一个excel实例中获取特定的excel文件。
答案 0 :(得分:1)
+1,争取使用Option Strict On。 :)
但是,代码使用的是所谓的Late Binding,并且要求您使用Option Strict Off。但是,您可以通过创建新的代码文件并使用Partial Class定义来包含需要延迟绑定的代码来最小化Option Strict Off的范围。
你可以通过使用带有Option Strict On的VB CallByName function来获得,但这会很快变得非常丑陋并且可能非常慢。
还有一种使用原生API的高级技术,称为COM反射,可以与Option Strict On配合使用。文章中描述了这种技术:[基本本能 - 用反射检查COM对象]。(https://msdn.microsoft.com/en-us/magazine/dd347981.aspx)。
早期绑定的典型方法(Option Strict On)是添加对Excel主互操作程序集的引用。这种技术也有一些批评者,但是迄今为止最简单的方法。
编辑:以下演示了如何使用Excel PIA和早期绑定直接打开与OP原始代码类似的工作簿。
Dim wbPath As String = "*** replace with path to your workbook ***"
Dim wb As Excel.Workbook = CType(GetObject(wbPath), Excel.Workbook)
'or
'Dim wb As Excel.Workbook = CType(Marshal.BindToMoniker(wbPath), Excel.Workbook)
Dim app As Excel.Application = wb.Application
app.Visible = True
wb.Windows(1).Visible = True
答案 1 :(得分:0)
作为旁注,如果您知道它有效,则无需依赖Interop.Excel
早期绑定。您可以将错误通知更改为警告,仍然可以编译并运行。
' Imports Microsoft.Office.Interop.Excel
Dim fileName = "c:\vb\test.xls"
If Not IO.File.Exists(fileName) Then MsgBox(fileName & " does not exist") : Exit Sub
Dim obj = GetObject(fileName, "Excel.Application")
Dim wb = TryCast(obj, Workbook)
wb.Application.Visible = True
wb.Windows(1).Visible = True