Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用VBA调整图表中水平轴的比例_Excel_Vba_Excel Charts - Fatal编程技术网

Excel 使用VBA调整图表中水平轴的比例

Excel 使用VBA调整图表中水平轴的比例,excel,vba,excel-charts,Excel,Vba,Excel Charts,我试图用VBA创建一个图表,用代码从表中收集数据(不是直接选择工作表中的数据,而是进行一些内部计算)。我的问题是它不能正确绘制X轴(它应该只显示12.19、01.20、02.20): 你知道如何调整这个(因为每个月有不同的天数…) 这是我的代码: Function ChartGenerator(mes As Double, contrato As String, kpi As String) Dim listax() As Double Dim listay() As Doub

我试图用VBA创建一个图表,用代码从表中收集数据(不是直接选择工作表中的数据,而是进行一些内部计算)。我的问题是它不能正确绘制X轴(它应该只显示12.19、01.20、02.20):

你知道如何调整这个(因为每个月有不同的天数…)

这是我的代码:

Function ChartGenerator(mes As Double, contrato As String, kpi As String)
    Dim listax() As Double
    Dim listay() As Double
    Dim numeelem As Integer
    numeelem = 0

last_row = Worksheets("Data").Range("A" & Rows.Count).End(xlUp).row

    For i = 2 To last_row
        If Worksheets("Data").Cells(i, 8).value <= mes And Worksheets("Data").Cells(i, 4).value = contrato _
        And Worksheets("Data").Cells(i, 5).value = kpi Then

            numeelem = numeelem + 1
        End If
    Next i

    ReDim listax(numeelem - 1)
    ReDim listay(numeelem - 1, 1)

    numeelem = 0
    For i = 2 To last_row
        If Worksheets("Data").Cells(i, 8) <= mes And Worksheets("Data").Cells(i, 4) = contrato _
        And Worksheets("Data").Cells(i, 5) = kpi Then

            numeelem = numeelem + 1
            listax(numeelem - 1) = Worksheets("Data").Cells(i, 8).value **'Those are dates**
            listay(numeelem - 1, 0) = Worksheets("Data").Cells(i, 6).value
            listay(numeelem - 1, 1) = Worksheets("Data").Cells(i, 7).value
        End If
    Next i

    Dim ydata As Variant
    ReDim ydata(numeelem - 1)

    Charts.Add
        With ActiveChart
            .ChartArea.ClearContents
            .ChartType = xlXYScatterLines
            .ChartStyle = 241 'para cambiar el estilo, usar este

            For k = 1 To 2
                For j = 0 To numeelem - 1
                    ydata(j) = listay(j, k - 1)
                Next j
                .SeriesCollection.NewSeries
                .SeriesCollection(k).XValues = listax
                .SeriesCollection(k).Values = ydata
                .SeriesCollection(k).Name = Worksheets("Data").Cells(1, 6 - 1 + k).value '"prueba" & i 'ID(i, 1)
                If k = 2 Then
                .SeriesCollection(k).Format.Line.DashStyle = msoLineSysDash
                End If
                    For j = 1 To numeelem
                    With .SeriesCollection(k).Points(j)
                        .ApplyDataLabels
                        .DataLabel.Text = listay(j - 1, k - 1)
                    End With
                    Next j
            Next k
            .HasTitle = True

        .Legend.Format.TextFrame2.TextRange.Font.Size = 14
        .ChartTitle.Text = contrato & " - " & kpi
        With .Axes(xlCategory, xlPrimary)
        .HasTitle = True
        .AxisTitle.Characters.Text = "Date"
        .AxisTitle.Font.Size = 14
        .AxisTitle.Font.Name = "calibri"
        .CategoryType = xlTimeScale
        .MinimumScale = listax(0) - 0.0000000001
        .MaximumScale = listax(numeelem - 1) + 1
        .MinorUnit = 31
        .MajorUnit = 31
        .TickLabels.NumberFormat = "mmmm-yy"
        End With
        With .Axes(xlValue, xlPrimary)
        .HasTitle = True
        .AxisTitle.Text = "Amount of €"
        .AxisTitle.Font.Size = 14
        .AxisTitle.Font.Name = "calibri"
        End With

        End With

End Function
函数图表生成器(mes为双精度,contrato为字符串,kpi为字符串)
Dim listax()为双精度
Dim listay()为双精度
作为整数的Dim numelem
努米勒姆=0
最后一行=工作表(“数据”).Range(“A”和Rows.Count).End(xlUp).row
对于最后一行的i=2

如果工作表(“数据”).Cells(i,8).value是保存在行或列中的x轴上显示的日期?如果您“使用VBA创建图表”,请向我们显示代码。我添加了代码,您知道吗?