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

Getting the count of sheets in debug mode - MS Excel PIA

我无法访问 Sheets.Count 属性。我正在使用 Excel Interop。我处于调试模式,正在尝试:

?xlSheets.Count

这导致:

(1) : error BC30456: 'Count' is not a member of 'Sheets'.

我不知道哪里出了问题,因为 I see in MSDN that there is such property!

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

These guys had a similar problem - 他们想要 .Worksheets.Add(.Worksheets.Sheets.Count)。最后他们没有得到计数,他们去了.Worksheets.Add(After:=.Worksheets(3))...


更新:

令我非常高兴的是,在进一步尝试/实验之后,很明显 在调试模式下 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.Creator) 替换 MessageBox.Show(xlSheets.Count) 时,尝试 ?xlSheets.Count 时出现错误。我还不知道这种行为的原因(我来自 VBA 调试模式似乎更灵活的环境),但至少在 运行 时间内有效...

如果有人知道如何解决这个问题,请告诉我,因为我在调试模式下测试小东西时感到受限

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

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

使用项目 > 属性 > 引用。找到并 select "Microsoft Excel xx.x Object Library" 条目。在属性 window 中,将嵌入互操作类型 属性 设置为 False。使用 Build > Rebuild 来重建您的应用程序。它现在将按您预期的方式工作。

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

您不想这样,请在完成测试后将 属性 设置回 True。