Массивы загружаются в график неправильно - PullRequest
0 голосов
/ 09 октября 2018

У меня есть 7 различных пользовательских форм, которые следуют одной и той же логике.У меня есть набор необработанных данных на листе в Excel.Каждая пользовательская форма имеет отдельную подпрограмму «контроллер», которая направляет процесс к достижению конечного результата, который заключается в отображении диаграмм в пользовательской форме.Когда пользовательская форма инициализируется, она вызывает необходимую подпрограмму «контроллер».Подпрограмма «controller» затем вызывает другую подпрограмму, которая обращается к моему необработанному набору данных в моей таблице Excel, где определяется диапазон данных.Как только диапазон данных определен, я использую эту информацию в следующем подразделе, где я строю свои массивы.Я строю массивы, по которым возвращаюсь обратно к контроллеру саба.После того, как массивы были построены, я затем вызываю свою подпрограмму, чтобы затем построить свои диаграммы, и пытаюсь передать эти массивы в требуемые диаграммы, а затем экспортировать их по мере необходимости, чтобы пользовательская форма отображала их.Пожалуйста, смотрите код ниже для лучшего понимания:

Sub mainUserForm(theVar As Integer)

Dim myVar As Integer

myVar = theVar

'first get the date range
Call getDataRange(False, 0, 0, myVar)

'next the arrays
If myVar = 1 Or myVar = 2 Then
    Call mainArrays(False)

Else
    Call mainArrays(True)
End If

'next build required charts
Call buildChartsMain(myVar)

End Sub

Теперь, для решения проблемы.Я использую Debug.Print Join(mainArray1) строку перед добавлением массива на диаграмму, однако данные, отображаемые на диаграмме, абсолютно неверны (это учитывает весь мой набор данных, а не диапазон).Опять же, когда я печатаю значения массива, они верны, поэтому процесс сборки не кажется неправильным, но почему-то что-то работает не так, как должно.Я объявил все необходимые переменные как Public для глобального использования.Я вставлю блоки моего кода ниже (не уверен, что понадобится в этом анализе, так как кажется, что все прекрасно работает до части графиков, что, я думаю, предпочтет здесь. Пожалуйста, смотрите код ниже:

Sub buildChartsMain(myVar As Integer)

Application.ScreenUpdating = False

Dim mainChart1 As Shape, mainChart2 As Shape
Dim myChartTitle As String
Dim fileName1 As String, fileName2 As String

myChartTitle = "My Chart Title"

Set mainChart1 = wsRawData.Shapes.AddChart2(Left:=0, Top:=0, Width:=288, Height:=222)
Set mainChart2 = wsRawData.Shapes.AddChart2(Left:=288, Top:=0, Width:=288, Height:=222)

With mainChart1.Chart
    If myVar = 1 Or myVar = 2 Then
        Debug.Print Join(mainArray1)
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Values = mainArray1()
        .SeriesCollection(1).XValues = mainDateArray()
    Else
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Values = mainArray3()
        .SeriesCollection(1).XValues = Array("J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D")
    End If
    .ChartType = xlColumnClustered
    .ChartStyle = 209
    .HasTitle = True
    .chartTitle.Text = myChartTitle
    .ChartArea.Font.Color = vbWhite
    .HasLegend = False
    .Axes(xlCategory).MajorGridlines.Delete
End With

With mainChart2.Chart
    If myVar = 1 Or myVar = 2 Then
        Debug.Print Join(mainArray2)
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Values = mainArray2()
    Else
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Values = mainArray4()
    End If
    .ChartType = xlBarClustered
    .ChartStyle = 209
    .HasTitle = True
    .chartTitle.Text = myChartTitle
    .ChartArea.Font.Color = vbWhite
    .HasLegend = False
    .Axes(xlCategory).MajorGridlines.Delete
    .Axes(xlCategory).ReversePlotOrder = True
    .Axes(xlValue).TickLabelPosition = xlHigh
End With

fileName1 = "G:\...\TempExcelCharts\" & Format(Date, "ddmmyyyy") & "MGi.jpg"
fileName2 = "G:\...\TempExcelCharts\" & Format(Date, "ddmmyyyy") & "MTi.jpg"

mainChart1.Chart.Export fileName:=fileName1, filterName:="JPG"
mainChart2.Chart.Export fileName:=fileName2, filterName:="JPG"

Call deleteAllCharts

Application.ScreenUpdating = True

End Sub

Значения из массива при печати:

-608.977899564394 -790.468111359605 261.83918034159 -2489.0105652811 1056.52810981723 -3180.41849515777 171.589419295134 -2137.41861594324 -3759.99257587681 5910.4390496604 2758.37807834967 -2597.07419574329

Но диаграмма в конечном итоге выглядит так, где явно это неверно:

enter image description here

Если кто-то может подумать о каких-либо проблемах с моей логикой и / или проблемах с методами, которые я использовал, пожалуйста, помогите! Я не могу на всю жизнь понять, почему тамразница!

Заранее спасибо Дин

1 Ответ

0 голосов
/ 10 октября 2018

Что если вы удалите скобки и превратите это

    .SeriesCollection(1).Values = mainArray1()

в это

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