我无法访问.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环境,其中调试模式似乎更灵活),但至少在运行时有效...
如果有人知道如何解决这个问题,请在调试模式下测试小东西时,让我知道我觉得受限制!
答案 0 :(得分:2)
使用项目>属性>引用。找到并选择“Microsoft Excel xx.x对象库”条目。在“属性”窗口中,将“嵌入互操作类型”属性设置为False。使用Build>重建以重建您的应用程序。它现在将以您期望的方式工作。
简而言之,此选项是对COM互操作库的强大优化,例如Microsoft.Office.Interop.Excel,您不再对库具有运行时依赖性。编译器将库中的互操作类型复制到程序的可执行文件中,只复制实际运行程序所需的类型。解释您的发现,当您在程序中不使用Count属性时,Count属性实际上已丢失。
您不想这样离开,在完成测试后将属性设置为True。
答案 1 :(得分:0)
您的代码适用于我。我注意到文件类型是一个启用宏的工作簿。您是否在开发PC上正确设置了宏设置?默认情况下,Excel将禁用宏。
编辑:我想我现在得到了你的问题。尝试在调试模式下打印属性时收到错误。可能您已经在未设置变量的位置停止了代码(.Count仅在按钮代码实际运行时可用)。在消息框行上添加断点,单击按钮,然后重试。