【问题标题】:vb.net late bindings issue even after setting the variable即使在设置变量后,vb.net 后期绑定问题
【发布时间】:2023-03-13 22:57:01
【问题描述】:

大家好,我有以下代码抛出后期绑定

我想把:

Dim excelWS As Worksheet

excelWS = New Worksheet

在使用变量纠正后期绑定问题之前?

更新 1

会是这样吗?

Dim excelRange As Range
Dim excelApp As Application
Dim excelWB As Workbook
Dim excelWS As Worksheets

excelWB = New Workbook

If madeSheet = False Then
   excelApp = New Application
   excelWB = excelApp.Workbooks.Add
   excelApp.Visible = True
End If

excelWS = New Worksheet

更新 2

现在在这条线上:

excelWS = excelWB.Worksheets.Add(After:=excelWB.Worksheets(sheetLoops))

我收到以下错误:

附加信息:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“Microsoft.Office.Interop.Excel.Worksheets”。此操作失败,因为 IID 为“{000208B1-0000-0000-C000-000000000046}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .

【问题讨论】:

  • 它的 vb.net 。你为什么不引用 Imports'Microsoft.Office.Interop.Excel 并使用'CreateObject'?
  • @jonathana 介意给出一个代码示例吗?
  • 没问题,是否可以将您的代码添加为文本而不是图像?
  • @jonathana 请检查我更新的 OP。
  • 投反对票的人请解释原因。

标签: excel vb.net binding office-interop late-binding


【解决方案1】:

请注意,您必须引用 Microsoft.Office.Interop.Excel 程序集: 项目>>添加参考>>检查 Microsoft Excel x.xx 对象库

Imports Microsoft.Office.Interop
Public Class Form1
    Private exapp As Excel.Application
    Private xlwb As Excel.Workbook
    Private xlws As Excel.Worksheet
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        exapp = New Excel.Application

        xlwb = exapp.Workbooks.Add()
        xlws = xlwb.Worksheets.Add()
        xlws.Name = "MY WS"


        xlws.Move(After:=xlwb.Sheets(xlwb.Sheets.Count))
        ' note: .value is a Range property
        xlws.Cells(1, 2) = "standard"


        xlwb.Application.DisplayAlerts = False
        exapp.Visible = True
        xlwb.Worksheets("sheet1").Delete()
        xlwb.SaveAs("C:\Users\john\Desktop\test.xlsx")
        xlwb.Close()

    End Sub
End Class

至于您的更新:

即使 Excel.Worksheet 和 Excel.Workbook 不是静态对象,在您的情况下,您也不需要立即生成(使用 new),因为您正在使用新工作簿和新工作表初始化它们。

  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim excelRange As Excel.Range
        Dim excelApp As Excel.Application
        Dim excelWB As Excel.Workbook
        Dim excelWS As Excel.Worksheets

        ' excelWB = New Workbook - you dont need an instant

        ' If madeSheet = False Then
        excelApp = New Excel.Application

        excelWB = excelApp.Workbooks.Add
            excelApp.Visible = True
        '  End If

        ' excelWS = New Worksheet - you dont need an instant
    End Sub

【讨论】:

  • 你的意思是把 Excel. 和所有这些放在一起吗?您不能只使用应用程序或工作簿或工作表吗?
  • 是的,您可以将 Imports Microsoft.Office.Interop 更改为 Imports Microsoft.Office.Interop.Excel
  • 查看我的 OP 进行第二次更新,看看我在按照您的建议更改所有内容时现在得到了什么。
  • 我认为您要移动索引为 0(最左侧/最后一个工作表)的工作表,并且无法将其移动到索引 -1。我说的对吗?
  • 这是一个循环,将创建几个标签。我将所有 excel 调用设置为空,我认为拥有它会为它创建一个新调用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多