我开发了以下代码来从命名范围“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”确实存在。该表中没有数据。
我知道这已经过时了,但对于阅读本文的任何人来说,检查空表的正确方法是使用ListRows.Count。
如果表为空,则返回零。换句话说,如果删除表中的所有行,则ListRows.Count将为零。
If Sheet1.ListObjects("Table").ListRows.Count = 0 Then
' empty
Else
' not empty
End If
Run Code Online (Sandbox Code Playgroud)
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)