VBA图表单元格区域中的空白值

时间:2018-06-30 06:13:06

标签: excel vba charts

购物车应如何显示信息,由于我在单元格B16中添加了零值,因此正确显示了购物车

How the cart should be displayed with information, it is being displayed correctly because I added a zero value in cell B16

错误图表,由于抵押贷款1的单元格中没有零值,因此无法正确显示

The error chart, not displaying properly because mortgage1 doesn't have a zero value in its cell

宏的运行方式以及来自用户表单的信息

How the macro is being run and information from user form

我的信息来自用户表单

Where my information lives from the userform

我有一个图表,该图表是使用宏为一系列单元格生成的。有时在该范围内会存在一些空白单元格。我在生成带有空单元格值的图表时遇到问题,该图表将在第一个非空单元格处开始绘制,从而导致类别轴无法报告正确。如何使用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

1 个答案:

答案 0 :(得分:2)

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

因此,第一个单元格在该联合范围内不得为空。没有值的单元格必须为<?php $myObj['name'] = "Smith"; $myObj['age'] = 20; $myObj['Address'] = "Yangon"; $myJSON = json_encode($myObj); echo "$myJSON"; ?>

您可以在代码中将SetSourceData替换为空白,如下所示:

#N/A

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