VBA Excel 判断“Table##”是否有数据

Ben*_*ons 7 excel vba

我开发了以下代码来从命名范围“Table24”创建图表。但是,有时此表没有有效数据,然后我希望我的数据集范围是一个带有 0 的单元格,并在没有数据的情况下填充图表。

这是 5 个图表中的第 4 个 - 使用调试模块,我确定这是每次运行时都会使我的 excel 文件崩溃的代码:

'//////////////////CHART 4 Creation //////////////////////////////
Set myChtRange = ws.Range("L43:R63")
' What range contains data for chart

If ws.Range("Table24").Rows.Count > 0 Then

Set myDataRange = ws.ListObjects("Table24").ListColumns(3).DataBodyRange

Else

Set myDataRange = ws.Range("K1")

End If

' Cover chart range with chart
Set objChart = .ChartObjects.Add( _
    Left:=myChtRange.Left, Top:=myChtRange.Top, _
    Width:=myChtRange.Width, Height:=myChtRange.Height)
' Put all the right stuff in the chart
With objChart.Chart
    .ChartArea.AutoScaleFont = False
    .ChartType = xlColumnClustered
    .ChartStyle = 214
    .SetSourceData Source:=myDataRange
    .Parent.Name = "Chart4"
    .HasTitle = True
    .HasLegend = False
    .ChartTitle.Characters.Text = "Most Tolerance Holds"
    .ChartTitle.Font.Bold = True
    .ChartTitle.Font.Size = 15

If ws.Range("Table24").Rows.Count > 0 Then

     .SeriesCollection(1).XValues = ws.ListObjects("Table24").ListColumns(2).DataBodyRange
Else
    .SeriesCollection(1).XValues = ws.Range("K1")

End If
    With .Axes(xlCategory, xlPrimary)
        .HasTitle = True
        With .AxisTitle
            .Characters.Text = " "
            .Font.Size = 10
            .Font.Bold = True
        End With
    End With
    With .Axes(xlValue, xlPrimary)
        .HasTitle = True
        .DisplayUnit = none
        .HasDisplayUnitLabel = False
        .TickLabels.NumberFormat = "#,##0.0"
        With .AxisTitle
            .Characters.Text = "Lines"
            .Font.Size = 15
            .Font.Bold = True
        End With
    End With
End With
Run Code Online (Sandbox Code Playgroud)

我试过了:

If ws.ListObjects("Table24").DataBodyRange.Rows.Count > 0 Then

If NOT ws.ListObjects("Table24").DataBodyRange Is Nothing Then
Run Code Online (Sandbox Code Playgroud)

甚至是空的

当表格如下所示时,我需要帮助来创建正确的参数:

在此处输入图片说明

作为参考,命名范围“Table24”确实存在。该表中没有数据。

在此处输入图片说明

Pau*_*lly 8

我知道这已经过时了,但对于阅读本文的任何人来说,检查空表的正确方法是使用ListRows.Count。

如果表为空,则返回零。换句话说,如果删除表中的所有行,则ListRows.Count将为零。

If Sheet1.ListObjects("Table").ListRows.Count = 0 Then
    ' empty
Else
    ' not empty
End If
Run Code Online (Sandbox Code Playgroud)


Tak*_*zwa 7

listobject 的 databodyrange 属性表示数据的范围。如果列表对象中没有数据,则范围内没有数据

if ws.ListObjects("Table24").DataBodyRange is Nothing then
  'Do something if there is no data
Else
  'Do something if there is data
end if
Run Code Online (Sandbox Code Playgroud)


Ben*_*ons 5

答案:如果 WorksheetFunction.CountA(Range("Table24")) = 1 那么