Создание пользовательских баров стандартного отклонения в VBA из Access

Я пытаюсь включить пользовательские бары стандартного отклонения в диаграмму с помощью VBA, но я продолжаю получать ошибку времени выполнения 13 «несоответствие типов» в строке, которая фактически добавляет бары. Я считаю, что у него проблема с моим объектом диапазона (rngStD), но я не знаю почему. Я использую этот VBA в Access, но я создал приложение Excel (xlApp), в котором сейчас находятся данные и где создаются графики.

'Start of relevant code
xlApp.Sheets("Monday").Select
Set rngAv = Range(Cells(numRows + 2, 3), Cells(numRows + 2, 26))
Set rngStD = Range(Cells(numRows + 3, 3), Cells(numRows + 3, 25))
xlApp.Sheets("Graphs").Select
'Creates graph for average usage with standard deviation at each point
Set oChart = xlApp.Worksheets("Graphs").ChartObjects.Add(600, 10, 500, 250).Chart
    oChart.SetSourceData Source:=rngAv   'xlApp.Selection
    oChart.Type = xlLine
    oChart.HasTitle = True
    oChart.ChartTitle.Text = "Average Usage for Mondays"

'At this point the code works and correctly creates the above graph

With oChart.FullSeriesCollection(1)
    .HasErrorBars = True
    .ErrorBars.Select
    'Error is on the next line, I believe it doesn't like the "Amount:=rngStD"
    .ErrorBar Direction:=xlY, Include:= _
        xlBoth, Type:=xlCustom, Amount:=rngStD.Value
    .ErrorBars.Select

End With

РЕДАКТИРОВАТЬ: добавлено .Value в конце rngStD.Value в последней строке. Теперь количество фиксируется на уровне 50 вместо отдельных значений для каждой точки в диапазоне. Не уверен, почему и как это исправить.


person andruemily    schedule 12.08.2015    source источник


Ответы (2)


Если rngStD был объявлен как диапазон, вам нужно добавить к нему .Value. Это передаст значение, хранящееся в диапазоне, а не сам объект диапазона.

person HarveyFrench    schedule 12.08.2015
comment
Хорошо поймал. Однако теперь с обновленным кодом ошибки нет, но все мои стандартные планки ошибок установлены на 50 вместо значений в пределах объекта диапазона. Есть идеи, как это исправить/почему это происходит? - person andruemily; 13.08.2015

Вам нужно передать адрес диапазона в нотации R1C1, перед которым ставится знак равенства. Попробуйте этот синтаксис:

.ErrorBar Direction:=xlY, Include:=xlBoth, _
    Type:=xlCustom, Amount:="=" & rngStD.Address(, , xlR1C1, True), _
    MinusValues:="=" & rngStD.Address(, , xlR1C1, True)
person Jon Peltier    schedule 20.08.2015