2015-05-22 8 views
3

Я пишу скрипт vb для создания диаграмм. На оси X у меня есть дата и по оси Y, темп.диаграмма ось метки формат vba настройки

На оси X я хочу представить время в формате «dd-mm». Мои данные выглядит следующим образом:

2014-06-17 01:00 
2014-06-17 02:00 
2014-06-17 03:00 
2014-06-17 04:00 
2014-06-17 05:00 
2014-06-17 06:00 
2014-06-17 07:00 
2014-06-17 08:00 
2014-06-17 09:00 

И это то, что я написал в VB Script до сих пор:

With chtChart.Chart 
    .HasTitle = True 
    .ChartTitle.Text = sheetName & vbCr & "2014" 
    .Axes(xlCategory, xlPrimary).HasTitle = True 
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Date" 
    .Axes(xlCategory, xlPrimary).CategoryType = xlTimeScale 
    .Axes(xlCategory, xlPrimary).MinimumScaleIsAuto = True 
    .Axes(xlCategory, xlPrimary).MaximumScaleIsAuto = True 
    .Axes(xlCategory, xlPrimary).TickLabels.NumberFormat = "dd-mm" 

    .Axes(xlValue, xlPrimary).HasTitle = True 
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Temperature [C]" 
    End With 

К сожалению, когда я создать диаграмму, все значение даты (например, 2014-06 -07 01:00) применяется к оси X.

Любые мысли/идеи о том, как я могу исправить то, что у меня есть?

Update:

весь код для создания диаграмм:

Function AddChartSheet(sheetName As String, title As String) As Boolean 
    Dim ws As Worksheet 
    Dim chtChart As ChartObject 
    Dim measDataSheetName As String 
    'Create a new chart. 
    measDataSheetName = sheetName & "_measurements.csv" 

    Dim Lastrow As Integer 
    Dim seriesNames() As String 

    ActiveWorkbook.Sheets.Add.name = sheetName & " chart" 
    Set ws = ActiveWorkbook.Sheets(sheetName & " chart") 

    Set chtChart = ActiveSheet.ChartObjects.Add(Left:=25, Top:=25, _ 
     Width:=700, Height:=500) 

    With chtChart 
     .name = sheetName 
    End With 


    Lastrow = ActiveWorkbook.Sheets(measDataSheetName).Cells(ActiveWorkbook.Sheets(measDataSheetName).Rows.Count, "P").End(xlUp).Ro 

    With chtChart.Chart 
    .HasTitle = True 
    .ChartTitle.Text = sheetName & vbCr & "2014" 
    .Axes(xlCategory, xlPrimary).HasTitle = True 
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Date" 
    .Axes(xlCategory, xlPrimary).CategoryType = xlTimeScale 
    .Axes(xlCategory, xlPrimary).MinimumScaleIsAuto = True 
    .Axes(xlCategory, xlPrimary).MaximumScaleIsAuto = True 
    .Axes(xlCategory, xlPrimary).TickLabels.NumberFormat = "dd-mm" 

    .Axes(xlValue, xlPrimary).HasTitle = True 
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Temperature [C]" 
    End With 

    With chtChart.Chart.SeriesCollection.NewSeries 
     .name = "Supply" 
     .ChartType = xlXYScatterSmoothNoMarkers 

     .XValues = Worksheets(measDataSheetName).Range("P2:P" & Lastrow) '. SelectRange("C3", Range("C3").End(xlDown)) 
     .Values = Worksheets(measDataSheetName).Range("T2:T" & Lastrow) 

    End With 


    With chtChart.Chart.SeriesCollection.NewSeries 
     .name = "Return" 
     .ChartType = xlXYScatterSmoothNoMarkers 

     .XValues = Worksheets(measDataSheetName).Range("P2:P" & Lastrow) '. SelectRange("C3", Range("C3").End(xlDown)) 
     .Values = Worksheets(measDataSheetName).Range("U2:U" & Lastrow) 

    End With 
    AddChartSheet = True 

End Function 
+0

Код выглядит хорошо. Вы уверены, что «chtChart.Chart» - это объект, на который вы смотрите? Кроме того, вы уверены, что даты читаются как таковые, а не как строки? Вы можете отлаживать его так: 1) первый пункт, попробуйте написать 'chtChart.Chart.Activate' и посмотреть, всплывает ли он. 2) вторую точку, попробуйте написать 'A1-1' (скажем, дата находится в диапазоне' A1' и наблюдайте, если вы получите ошибку значения). –

+0

isDate метод возвращает true для этих значений .... – JosiP

+0

Что вы получаете, когда проверяете форматирование числа после запуска этого кода? Показывает ли это «dd-mm» или какое-либо другое значение? Также, что произойдет, если вы ** установили логику форматирования после создания новой серии **? Excel может переписать форматирование после обнаружения типа данных новой серии. Это может быть более вероятно, так как вы также меняете тип диаграммы с этими новыми сериями. –

ответ

1

Ok я нашел решение: форматирование после отправки данных:

With chtChart.Chart 
    .HasTitle = True 
    .ChartTitle.Text = sheetName & vbCr & "2014" 
    .Axes(xlCategory, xlPrimary).HasTitle = True 
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Date" 
    .Axes(xlCategory, xlPrimary).CategoryType = xlTimeScale 
    .Axes(xlCategory, xlPrimary).MinimumScaleIsAuto = True 
    .Axes(xlCategory, xlPrimary).MaximumScaleIsAuto = True 
    .Axes(xlCategory, xlPrimary).TickLabels.NumberFormat = "dd-mm" 

    .Axes(xlValue, xlPrimary).HasTitle = True 
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Temperature [C]" 
    End With 

    With chtChart.Chart.SeriesCollection.NewSeries 
     .name = "Supply" 
     .ChartType = xlXYScatterSmoothNoMarkers 

     .XValues = Worksheets(measDataSheetName).Range("P2:P" & Lastrow) '. SelectRange("C3", Range("C3").End(xlDown)) 
     .Values = Worksheets(measDataSheetName).Range("T2:T" & Lastrow) 

    End With 

With chtChart.Chart 
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Date" 
    .Axes(xlCategory, xlPrimary).TickLabels.NumberFormat = "dd-mm" 

    End With 

и это сработало.