获取debugging模式下的工作表数 – MS Excel PIA

我无法访问Sheets .Count属性。 我正在使用Excel Interop。 我在debugging模式,我想这个:

 ?xlSheets.Count 

这导致:

(1):错误BC30456:“计数”不是“表格”的成员。

我不知道什么是错的,因为我在MSDN中看到有这样的属性 !

这效果很好: ?xlSheets(1).Name 。 但Count失败…有可能得到床单的数量?

这些人有一个类似的问题 – 他们想.Worksheets.Add(.Worksheets.Sheets.Count) 。 最后他们没有得到计数 ,他们去了.Worksheets.Add(After:=.Worksheets(3))


更新:

令我非常高兴的是,经过进一步尝试/试验之后,很明显, 在debugging模式下, 只有在代码中没有这样的行时, Sheets.Count才能工作

在debugging此代码时,我可以访问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)replaceMessageBox.Show(xlSheets.Count)时,尝试?xlSheets.Count时出现错误。 我还不知道这种行为的原因(我来自VBA环境,其中debugging模式似乎更灵活),但至less在运行时工作…

如果有人知道如何解决这个问题,请让我知道,因为我觉得在debugging模式下testing小东西时受到限制

使用项目>属性>引用。 find并select“Microsoft Excel xx.x对象库”条目。 在“属性”窗口中,将“embedded互操作types”属性设置为False。 使用生成>重build来重build你的应用程序。 它现在将按照您的预期工作。

简而言之,该选项是对COM互操作库的强大优化,例如Microsoft.Office.Interop.Excel,您不再对该库有运行时依赖关系。 编译器将库中的互操作types复制到程序的可执行文件中,只有那些实际需要运行程序的文件。 解释你的发现,当你不在你的程序中使用它时,Count属性实际上是缺失的。

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

你的代码适合我。 我注意到文件types是一个启用macros的工作簿。 你有没有在开发PC上正确设置你的macros设置? 默认情况下,Excel将禁用macros。

编辑:我想我现在得到你的问题。 尝试以debugging模式打印属性时出现错误。 也许你已经停止了代码的variables没有设置(.Count只有在button代码实际运行时才可用)。 在消息框上放置一个断点,单击button,然后重试。