【问题标题】:VBA Chart Blank Values in Cell RangeVBA图表单元格区域中的空白值
【发布时间】:2018-06-30 06:13:05
【问题描述】:

购物车应该如何显示信息,因为我在单元格 B16 中添加了一个零值,所以它可以正确显示

错误图表,因为mortgage1在其单元格中没有零值而无法正确显示

宏是如何运行的以及来自用户表单的信息

我的信息在用户表单中的位置

我有一个使用宏为一系列单元格生成的图表。有时,该范围内会存在一些空白单元格。我在使用空单元格值生成图表时遇到问题,图表将在第一个非空单元格处开始绘制,导致类别轴报告不正确。如何使用 VBA 使我的图表在我的图表上显示一个空白值。我不想在我的单元格范围内使用公式。

这是我的代码:

Sub createchart()

Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Sheets("contactunder")


Dim CellRow As Integer    

wb.Sheets("ContactsFront").Select  
CellRow = ActiveCell.Row   
Worksheets("samplesheet").Activate
ActiveSheet.Shapes.AddChart2(251, xlBarClustered).Select
ActiveChart.DisplayBlanksAs = xlNotPlotted
ActiveChart.SetSourceData Source:=ws.Range("BY" & CellRow & ",CB" & CellRow & ",CH" & CellRow & ",CJ" & CellRow & ",CL" & CellRow & ",CN" & CellRow & ",CP" & CellRow)
ActiveChart.FullSeriesCollection(1).XValues = "contactunder!$BY$10,contactunder!$CB$10,contactunder!$CH$10,contactunder!$CJ$10,contactunder!$CL$10,contactunder!$CN$10,contactunder!$CP$10"
ActiveChart.SetElement (msoElementDataLabelOutSideEnd)
ActiveChart.SetElement (msoElementPrimaryCategoryGridLinesNone)
ActiveChart.Axes(xlValue).MajorGridlines.Format.Line.Visible = msoFalse
ActiveChart.FullSeriesCollection(1).DataLabels.ShowCategoryName = False

With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Analysis for " & ws.Range("D" & CellRow)
ActiveChart.HasAxis(xlValue) = False
ActiveChart.HasLegend = False
End With

End Sub

【问题讨论】:

  • 您是否尝试将ActiveChart.DisplayBlanksAs 设置为xlInterpolatedxlZero
  • @cybernetic.nomad 不幸的是,这些选项都没有提供解决方案
  • 您能否发布一个示例预期结果和您得到的结果,以便我们进行比较?
  • @cybernetic.nomad 请参阅我的帖子以获取包含的图片。希望这可以帮助。再次感谢您一直以来的帮助!
  • 由于您使用联合范围作为图表的源数据,该联合范围中的所有空单元格都不会进入源。因此,该联合范围内不能有空单元格。没有值的单元格必须是#N/A

标签: excel vba charts


【解决方案1】:

由于您使用联合范围作为图表的源数据,因此在使用 @ 将该联合范围设置为图表的源数据后,该联合范围中的第一个 空白 单元格将不会进入源数据987654321@。

因此,该联合范围内的第一个单元格不能为空。没有值的单元格必须是#N/A

您可以在代码中将空白替换为 #N/A,如下所示:

...
Set oChartRange = ws.Range("BY" & CellRow & ",CB" & CellRow & ",CH" & CellRow & ",CJ" & CellRow & ",CL" & CellRow & ",CN" & CellRow & ",CP" & CellRow)
For Each oCell In oChartRange
 If Not IsError(oCell.Value) Then
  If oCell.Value = "" Then oCell.Value = CVErr(2042)
 End If
Next
ActiveChart.SetSourceData Source:=oChartRange
...

当然,您需要记住,在公式中使用该单元格时,该单元格中可能存在错误值。所以也许你必须使用IFERROR。但尽管如此,我不会使用 0,因为 0 是一个有价值的数字,它的含义与空白不同。空白表示不可用而不是 0。所以我真的会在这里使用#N/A

【讨论】:

  • 在我调整我的用户表单以使用 .text 读取 #N/A 后,您的解决方案正在运行。现在需要弄清楚如何让我的用户表单在加载时不显示 #N/A
猜你喜欢
  • 2018-01-03
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
相关资源
最近更新 更多