ListRows.Count返回不一致的结果

时间:2015-12-05 08:18:33

标签: excel excel-vba vsto listobject vba

我的两个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中的源文件,我无法发现任何差异。知道我应该寻找什么(以及哪个结果是正确的)?

1 个答案:

答案 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

这些是表格:
table1 table2

如果通过选择标题和一个空行然后将选择格式化为表格来创建(错误)这些表,则它们会有一个空行。此行没有内容,行中的COUNTA为0,它看起来像无法删除的插入行。但它是一个有效的数据行,因此ListRows.Count将获得1的值。

同样,如果您填写一些数据并手动删除这些输入的值(使用删除)以使您的表在开头看起来像,那么结果仍然是1

如果您手动或以编程方式删除行(使用Sheet1.Range("Sheet1Table").Rows("1").Delete之类的内容),则ListRows.Count将生成0的值。

确定数据行实际数量的解决方案是检查ListRows.Count,如果结果为1 - 在检查行是否包含实际值后删除该行。如果通过在单击 Format as Table 之前选择标题行来创建空表,则可以避免这种情况。然后会自动创建插入行,而不会将其计为数据行(在这种情况下,ListRows.Count的结果为0)。

相关问题