Моя общая проблема заключается в том, что я хочу создавать динамические диаграммы с динамическим масштабом по оси X (и оси Y). Ось X содержит даты моих наблюдений.
Чтобы установить минимальный и максимальный масштаб по оси X, я попытался создать массив дат и установить нижнюю и верхнюю границу в качестве минимального и максимального масштаба соответственно.
Запустив код ниже, я получаю
Ошибка 13: ошибка несоответствия типов
при определении массива ArrDate
.
Я попытался установить содержимое массива на as Variant
вместо as Range
, как и было изначально. Ниже приведен код, с которым у меня проблемы (я пытался отфильтровать ненужный код).
Option Explicit
Option Base 0
' Worksheets and workbooks
Public ws As Worksheet
Public ws_O As Worksheet
Public wkb As Workbook
' Integers
Public i As Integer
' Variants and ranges
Public Val_NF3 As Range
Public Val_Barra As Range
Public Val_NF3_Date As Range
Public Val_Barra_Date As Range
Public Val_Total_Date As Variant ' Originally set to Range
Public ArrDate As Variant
Public ArrCht As Variant
' String
Public cht_Name As String
Public ws_Name As String
Sub Update()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.StatusBar = "Updating graphs ... "
' Assign correct sheet and ranges to retrieve data from
ws_Name = "Data"
Set wkb = thisworkbook
Set ws = wkb.Sheets(ws_Name)
Set ws_O = wkb.sheets("Overview")
' Updating graphs
Debug.Print "Chart loop order by chart name:" ' To show loop order
ArrCht = Array("Beta", "StDev", "TE")
For i = LBound(ArrCht) To UBound(ArrCht)
cht_Name = ArrCht(i)
Set cht = ws_O.ChartObjects(cht_Name)
Set Val_NF3 = ws.Range(ws.Cells(2, 4 + i), ws.Cells(200, 4 + i)) ' Set range of values from NF3 (GEM3)
Set Val_Barra = ws.Range(ws.Cells(201, 4 + i), ws.Cells(500, 4 + i)) ' Set range of values Barra
Set Val_NF3_Date = ws.Range(ws.Cells(2, 3), ws.Cells(500, 3)) ' Set range of date for NF3 observations
Set Val_Barra_Date = ws.Range(ws.Cells(201, 3), ws.Cells(500, 3)) ' Set range of date for Barra observations
Set Val_Total_Date = Union(Val_NF3_Date, Val_Barra_Date)
Set ArrDate = Array(Val_Total_Date)' <---- CODE FAILS HERE WITH TYPE MISMATCH ERROR
With cht.Chart
Debug.Print cht.Name ' Loop order
Debug.Print ArrDate(1)
Debug.Print "First observation day:" & LBound(ArrDate, 1)
Debug.Print "Last observation day:" & UBound(ArrDate, 2)
.FullSeriesCollection(1).Format.Line.ForeColor.RGB = ws_O.Cells(1 + i, 20).Interior.Color
.FullSeriesCollection(2).Format.Line.ForeColor.RGB = ws_O.Cells(2 + i, 20).Interior.Color
.FullSeriesCollection(1).Values = Val_NF3 ' Value series for NF3
.FullSeriesCollection(2).Values = Val_Barra ' Value series for Barra
.FullSeriesCollection(1).XValues = Val_NF3_Date
.FullSeriesCollection(2).XValues = Val_Barra_Date
If cht_Name = "Beta" Then ' Defining Beta = 1
.FullSeriesCollection(3).Format.Line.ForeColor.RGB = ws_O.Cells(1, 21).Interior.Color ' Color
.FullSeriesCollection(3).Values = 1
.SeriesCollection(3).XValues = Val_Total_Date
End If
.Axes(xlCategory).CategoryType = xlTimeScale
.Axes(xlCategory).MajorUnitScale = xlMonths
.Axes(xlCategory).MajorUnit = 4
.Axes(xlCategory).MinimumScale = ArrDate(1)
.Axes(xlCategory).MaximumScale = ArrDate(999)
.Axes(xlCategory).MinimumScale = LBound(ArrDate, 2)
.Axes(xlCategory).MaximumScale = UBound(ArrDate, 2)
' My failed attempts to scale the x-axis and y-axis (this is the overall problem)
'.Axes(xlCategory).MaximumScaleIsAuto = True
'.Axes(xlCategory).MajorUnitIsAuto = True
'.Axes(xlValue).MinimumScaleIsAuto = True
'.Axes(xlValue).MaximumScaleIsAuto = True
'.AutoScaling = True
End With
Next i
Application.StatusBar = False
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub