VBA Chart Blank Значения в диапазоне ячеек - PullRequest
0 голосов
/ 30 июня 2018

Как корзина должна отображаться с информацией, она отображается правильно, потому что я добавил нулевое значение в ячейку B16

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

Диаграмма ошибок, отображаемая некорректно, поскольку в ее ячейке не указано нулевое значение

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 голосов
/ 01 июля 2018

Поскольку вы используете диапазон объединения в качестве исходных данных вашей диаграммы, первая пустая ячейка в этом диапазоне объединения не будет в источнике после установки этого диапазона объединения в качестве исходных данных диаграммы с использованием 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...