在调试模式下获取工作表数量 - MS Excel PIA

时间:2015-07-02 23:16:00

标签: vb.net excel debugging interop excel-interop

我无法访问.Count的{​​{1}}属性。我正在使用Excel Interop。我正处于调试模式,我正在尝试这个:

Sheets

这导致:

  

(1):错误BC30456:'计数'不是表格'

的成员

我不清楚错误是什么,I see in MSDN that there is such property

这很有效:?xlSheets.Count 。但?xlSheets(1).Name失败了...是否有可能得到张数?

These guys had a similar problem - 他们希望Count。最后他们没有得到计数,他们去了.Worksheets.Add(.Worksheets.Sheets.Count) ...

更新:

令我非常高兴的是,经过进一步的尝试/实验,很明显,当代码中没有这样的行时,调试模式.Worksheets.Add(After:=.Worksheets(3))中的不能 / strong>即可。

调试此代码时,我可以访问Sheets.Count,因为代码中存在此行。

Sheets.Count

但是当我用Imports Excel = Microsoft.Office.Interop.Excel Public Class Form1 Dim xlApp As Excel.Application Dim xlWorkBook As Excel.Workbook Dim xlWorkbooks As Excel.Workbooks Dim xlSheets As Excel.Sheets Private Sub btnCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreate.Click xlApp = New Excel.Application xlWorkbooks = xlApp.Workbooks xlWorkBook = xlWorkbooks.Open("C:\Temp\Template.xlsm") xlSheets = xlWorkBook.Sheets MessageBox.Show(xlSheets.Count) xlWorkBook.Close() xlApp.Quit() 'Clean Up releaseObject(xlSheets) releaseObject(xlWorkBook) releaseObject(xlWorkbooks) releaseObject(xlApp) End Sub Private Sub releaseObject(ByVal obj As Object) Try System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) obj = Nothing Catch ex As Exception obj = Nothing Finally GC.Collect() GC.WaitForPendingFinalizers() End Try End Sub End Class 替换MessageBox.Show(xlSheets.Count)时,尝试MessageBox.Show(xlSheets.Creator)时会出现错误。我还不知道这种行为的原因(我来自VBA环境,其中调试模式似乎更灵活),但至少在运行时有效...

如果有人知道如何解决这个问题,请在调试模式下测试小东西时,让我知道我觉得受限制

2 个答案:

答案 0 :(得分:2)

使用项目>属性>引用。找到并选择“Microsoft Excel xx.x对象库”条目。在“属性”窗口中,将“嵌入互操作类型”属性设置为False。使用Build>重建以重建您的应用程序。它现在将以您期望的方式工作。

简而言之,此选项是对COM互操作库的强大优化,例如Microsoft.Office.Interop.Excel,您不再对库具有运行时依赖性。编译器将库中的互操作类型复制到程序的可执行文件中,只复制实际运行程序所需的类型。解释您的发现,当您在程序中不使用Count属性时,Count属性实际上已丢失。

您不想这样离开,在完成测试后将属性设置为True。

答案 1 :(得分:0)

您的代码适用于我。我注意到文件类型是一个启用宏的工作簿。您是否在开发PC上正确设置了宏设置?默认情况下,Excel将禁用宏。

编辑:我想我现在得到了你的问题。尝试在调试模式下打印属性时收到错误。可能您已经在未设置变量的位置停止了代码(.Count仅在按钮代码实际运行时可用)。在消息框行上添加断点,单击按钮,然后重试。