Vba 检查样式为的格式化表是否没有数据

Vba 检查样式为的格式化表是否没有数据,vba,excel,Vba,Excel,我有一个名为“目标”的格式化表格。我有一个计数器来检查桌子上有多少行。每次添加或删除行时,计数器都会更新 Private Sub Worksheet_Change(ByVal Target As Range) If Range("Goals").Rows(1) = Empty Then Worksheets("Counters").Cells(2, 1) = 0 Else Worksheets("Counters").Cells(2, 1) = Range("Goals").R

我有一个名为“目标”的格式化表格。我有一个计数器来检查桌子上有多少行。每次添加或删除行时,计数器都会更新

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("Goals").Rows(1) = Empty Then
    Worksheets("Counters").Cells(2, 1) = 0
Else
    Worksheets("Counters").Cells(2, 1) = Range("Goals").Rows.Count
End If

End Sub
如果填充表格并删除所有行,导致表格没有数据,则条件
范围(“目标”)。行(1)=空将被评估为
False
,并且计数器不会正确更新。但是,如果表中有一行数据,并且手动擦除单元格(不删除表中的行),则
计数器会正确更新,我不知道为什么

我曾尝试将条件评估为
工作表(GoalsList).Cells(2,1)=空
,但也不起作用


请帮帮我,我不知道该怎么办

如果您有一个名为“Table1”的Excel表格,您可以根据其第1列数据找到最后一行数据,如下所示

Worksheets("Counters").Cells(2, 1) = ws.ListObjects("Table1").Range.Columns(1).Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Dim tbl As ListObject
On Error Resume Next
Set tbl = ws.ListObjects("Goals")
On Error GoTo 0
If Not tbl Is Nothing Then
    Worksheets("Counters").Cells(2, 1) = WorksheetFunction.CountA(ws.ListObjects("Goals").DataBodyRange.Columns(1).Cells)
End If
如果您已经创建了一个名为“Golas”的命名范围,它引用了整个Excel表,您可以尝试

Worksheets("Counters").Cells(2, 1) = Range("Goals").Columns(1).Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
要检查该表是否存在,请尝试以下操作

Worksheets("Counters").Cells(2, 1) = ws.ListObjects("Table1").Range.Columns(1).Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Dim tbl As ListObject
On Error Resume Next
Set tbl = ws.ListObjects("Goals")
On Error GoTo 0
If Not tbl Is Nothing Then
    Worksheets("Counters").Cells(2, 1) = WorksheetFunction.CountA(ws.ListObjects("Goals").DataBodyRange.Columns(1).Cells)
End If

Range(“Goals”)
指的是一个名为“Goals”的
Names范围,而不是一个表,在VBA中它是一个
ListObject
,那么您的工作表中有哪一个呢?我有一个名为“Goals”的表。为什么是工作范围?嗨,我尝试了两种代码,但问题仍然存在。只有当表“Goals”只填充了1行时才会发生这种情况,如果删除了该行,则计数器不会更新为0。如果我对工作表进行了另一次更改,则计数器将正确更新为0。我需要在删除数据行后立即更新计数器,而不必在工作表中进行其他更改。这两个代码也包括表的列标题。所以,若表的第一列中并没有包含数据的单元格,它们将返回1。因此,您应该减去1,即ws.ListObjects(“Table1”).Range.Columns(1.Cells.Find(“*”),SearchOrder:=xlByRows,SearchDirection:=xlPrevious)。行-1是的,我认为您的代码和我的代码都可以正常工作。只有当表“Goals”只填充了1行时才会发生这种情况,如果删除了该行,则计数器不会更新为0。我必须在工作表中做另一个更改,即在单元格中写入。使计数器正确更新。如果表中填充了2,3。。。。行和我删除了所有行,然后计数器正确更新。那么工作表(“计数器”).Cells(2,1)=工作表function.CountA(ws.ListObjects(“Goals”).datagodyrange.Columns(1.Cells”)?它看起来像是删除了表中的唯一一行,而不是由
私有子工作表\u change(ByVal Target as Range)标识为更改(ByVal Target as Range)