1

我的两个 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;

结果是numberOfListRows11 和numberOfListRows20,尽管结果(以正确者为准)应该相同。我比较了表格和工作表的属性,以及 Visual Studio 中的源文件,我没有发现任何差异。知道我应该寻找什么(哪个结果是正确的)?

4

1 回答 1

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

这些是表格:
表格1 表2

当通过选择标题和一个空行然后将所选内容格式化为表格来创建这些表(错误地)时,它们有一个空行。该行没有内容,COUNTA跨行为0,看起来像插入行,不能删除。然而,它是一个有效的数据行,因此ListRows.Count将获得 的值1

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

如果您手动或以编程方式(使用类似的东西Sheet1.Range("Sheet1Table").Rows("1").Delete)删除行,ListRows.Count则将产生0.

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

于 2015-12-05T08:57:12.357 回答