У меня есть 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](https://i.stack.imgur.com/N9nrR.png)
Если кто-то может подумать о каких-либо проблемах с моей логикой и / или проблемах с методами, которые я использовал, пожалуйста, помогите! Я не могу на всю жизнь понять, почему тамразница!
Заранее спасибо Дин