Excel 单元格范围内的VBA图表空白值

Excel 单元格范围内的VBA图表空白值,excel,vba,charts,Excel,Vba,Charts,购物车应如何显示信息,它显示正确,因为我在单元格B16中添加了一个零值 错误图表,未正确显示,因为mortgage1的单元格中没有零值 宏的运行方式和来自用户窗体的信息 我的信息来自用户表单 我有一个图表,它是由一系列单元格的宏生成的。有时,该范围内会存在一些空白单元格。当使用空单元格值生成图表时,我遇到一个问题,图表将在第一个非空单元格处开始打印,导致类别轴报告不正确。如何使用VBA使图表在图表上显示空白值。我不想在我的手机范围内使用公式 这是我的密码: Sub createchart

购物车应如何显示信息,它显示正确,因为我在单元格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

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

所以第一个单元格在该并集范围内不能为空。没有值的单元格必须为
#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

因为您使用union range作为图表的源数据,所以在使用
SetSourceData
将union range设置为图表的源数据后,该union range中的第一个空白单元格将不会进入源

所以第一个单元格在该并集范围内不能为空。没有值的单元格必须为
#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

您是否尝试过将
ActiveChart.displaybanksas
设置为
xlInterpolated
xlZero
?@controlnetic.nomad不幸的是,这两个选项都没有提供解决方案。您能否发布一个示例,说明预期的结果和您得到的结果,所以我们可以比较?@controlnetic.nomad请查看我的帖子以获取包含的图片。希望这有帮助。再次感谢您的持续帮助!由于您使用的是联合区域作为图表的源数据,因此该联合区域中的所有空单元格都不会被放入源中。因此,在该并集范围内不能有空单元格。没有值的单元格必须是
#N/A
。您是否尝试过将
ActiveChart.DisplayBlanksAs
设置为
xlInterpolated
xlZero
?@controlnetic.nomad不幸的是,这两个选项都没有提供解决方案。您能否发布一个示例,说明预期的结果和您得到的结果,所以我们可以比较?@controlnetic.nomad请查看我的帖子以获取包含的图片。希望这有帮助。再次感谢您的持续帮助!由于您使用的是联合区域作为图表的源数据,因此该联合区域中的所有空单元格都不会被放入源中。因此,在该并集范围内不能有空单元格。没有值的单元格必须是
#N/A
。在我将我的用户表单调整为使用
.text
读取#N/A后,您的解决方案开始工作。现在需要弄清楚如何让我的userform在加载时不显示
#N/A
值。在我将我的userform调整为使用
.text
读取#N/A后,您的解决方案可以正常工作。现在需要弄清楚如何让我的userform在加载时不显示
#N/A