我的两个Excel表格存在于我的项目中的两个不同的工作表上,这有一个奇怪的问题。我正在使用VSTO,但VBA显示相同的结果:在另一种情况下,空表的行数在一个案例中有0行,在1行(我假设插入行)。
设置
两个工作表:Sheet1,Sheet2
两个对应的命名Excel表:Sheet1Table,Sheet2Table
两个表都是空的,即它们有一个空行,即无法删除的插入行。
我运行以下代码来确定数据行的数量(即不包括标题行):
Microsoft.Office.Tools.Excel.ListObject sheet1Table = Globals.Sheet1.Sheet1Table;
int numberOfListRows1 = sheet1Table.ListRows.Count;
和
Microsoft.Office.Tools.Excel.ListObject sheet2Table = Globals.Sheet2.Sheet2Table;
int numberOfListRows2 = sheet2Table.ListRows.Count;
结果是numberOfListRows1
为1且numberOfListRows2
为0,但结果(无论哪个是正确的)应该相同。我比较了表和工作表属性,以及Visual Studio中的源文件,我无法发现任何差异。知道我应该寻找什么(以及哪个结果是正确的)?
答案 0 :(得分:1)
在VBA中,我使用这些子来测试你的情况:
Sub Sheet1TableRowsCount()
Dim numberOfListRows1 As Integer
Dim sheet1Table As ListObject
Set sheet1Table = Sheet1.ListObjects("Sheet1Table")
numberOfListRows1 = sheet1Table.ListRows.Count
Set sheet1Table = Nothing
End Sub
Sub Sheet2TableRowsCount()
Dim numberOfListRows2 As Integer
Dim sheet2Table As ListObject
Set sheet2Table = Sheet2.ListObjects("Sheet2Table")
numberOfListRows2 = sheet2Table.ListRows.Count
Set sheet2Table = Nothing
End Sub
如果通过选择标题和一个空行然后将选择格式化为表格来创建(错误)这些表,则它们会有一个空行。此行没有内容,行中的COUNTA
为0,它看起来像无法删除的插入行。但它是一个有效的数据行,因此ListRows.Count
将获得1
的值。
同样,如果您填写一些数据并手动删除这些输入的值(使用删除)以使您的表在开头看起来像,那么结果仍然是1
。
如果您手动或以编程方式删除行(使用Sheet1.Range("Sheet1Table").Rows("1").Delete
之类的内容),则ListRows.Count
将生成0
的值。
确定数据行实际数量的解决方案是检查ListRows.Count
,如果结果为1 - 在检查行是否包含实际值后删除该行。如果通过在单击 Format as Table 之前选择标题行来创建空表,则可以避免这种情况。然后会自动创建插入行,而不会将其计为数据行(在这种情况下,ListRows.Count
的结果为0
)。