Диаграмма, отображающая одно и то же число на всех отметках оси y - PullRequest
0 голосов
/ 06 ноября 2019

Я довольно новичок в VBA, поэтому мой предоставленный код может быть далеко не оптимизирован. Однако я был бы рад услышать, что можно улучшить!

У меня есть лист с двумя столбцами данных, одной ячейкой для записи, точечной диаграммой и тремя кнопками. Предполагается, что диаграмма просто отображает два столбца и добавляет значение ячейки ввода в виде вертикальной линии. Одна кнопка предназначена для обновления графика (например, для настройки осей). Другой должен показать пример, вставив некоторые данные, хранящиеся на другом скрытом листе, в два столбца, а также в ячейку ввода, и после этого обновите диаграмму. Предполагается, что последняя кнопка просто сбрасывает лист, так что столбцы данных и ячейка ввода пусты, а диаграмма должна быть скрыта.

Проблема: Однако кнопка обновления не работает. Похоже, изменить размер поля просмотра диаграммы в соответствии с вновь введенными данными. Но числа, показанные на оси Y, всегда 0,05. Я предоставил картинку, чтобы показать вам, что я имею в виду:

Sheet Chart

Когда я нажимаю кнопку примера, ось y показывает правильные значения. Я попытался сначала скопировать данные в столбцах на другой лист, затем обновить диаграмму и затем вставить данные обратно в столбцы, но безуспешно.

Я заметил, что когда на диаграмме отображается только 0,05, и я нажимаюна графике, чтобы «выбрать данные» и просто выбрать вторую серию, значения y изменятся на то, что они должны быть, и я могу закрыть окно, и оно останется в порядке, пока я снова не нажму кнопку обновления.

Может быть, в моем коде есть недостатки, о которых я не знаю? Может быть, мне нужно вместо обновления диаграммы удалить старую и каждый раз создавать новую? Однако я уже попробовал это с тем же результатом. Может быть, код должен быть написан в другой последовательности?

Пример кнопки:

Private Sub ExampleBtn_Click()

Call RefreshBtn_Click

Range("C5:D27").ClearContents 'data columns

Range("C5:D14").Value = Sheets("ExampleSheet").Range("A1:B10").Value
Range("O3").Value = 3.5 'entry cell

End Sub

Кнопка сброса:

Private Sub ResetBtn_Click()

ActiveSheet.ChartObjects(1).Visible = False

Range("C5:D27").ClearContents 'data columns
Range("O3").ClearContents 'entry cell
Range("C5").Select

End Sub

Кнопка обновления:

Private Sub RefreshBtn_Click()

ActiveSheet.Unprotect
Application.ScreenUpdating = False


ActiveSheet.ChartObjects(1).Visible = True

'range of Nachdruckzeit
Set zeit = Range("C5:C27")

'range of Masse
Set masse = Range("D5:D27")

yMax = Application.WorksheetFunction.max(Range("D5:D27")) + 0.02
yMin = Application.WorksheetFunction.min(Range("D5:D27")) - 0.02

'refresh the chart
With ActiveSheet.ChartObjects(1)
    .Width = Range("F5:P30").Width
    .Height = Range("F5:P30").Height

    If .Chart.SeriesCollection.Count = 1 Then
        .Chart.SeriesCollection(1).Delete
    ElseIf .Chart.SeriesCollection.Count = 2 Then
        .Chart.SeriesCollection(2).Delete
        .Chart.SeriesCollection(1).Delete
    End If

    With .Chart.SeriesCollection.NewSeries
        .XValues = zeit
        .Values = masse
        .Name = "Siegelpunktermittlung"
        .HasDataLabels = False
    End With

    t = Range("O3").Value 'entry cell
    With .Chart.SeriesCollection.NewSeries
        .Name = "gewaehlt"
        .XValues = Array(t, t)
        .Values = Array(0, yMax)
        .MarkerStyle = xlMarkerStyleNone
        .Border.Color = vbWhite
    End With
End With

'Cosmetics
With ActiveSheet.ChartObjects(1).Chart
  .HasLegend = False
  .ChartArea.Format.Fill.Visible = msoFalse
  .PlotArea.Format.Fill.Visible = msoFalse
  .SeriesCollection(1).MarkerStyle = xlMarkerStyleCircle
  .SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(251, 243, 223)
  .SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(255, 140, 0)
  .SeriesCollection(1).MarkerForegroundColorIndex = -4142

  'x-axis
  With .Axes(xlCategory)
    .HasTitle = True
    .TickLabels.Font.Color = vbWhite
    .AxisTitle.Font.Size = 12
    .AxisTitle.Font.Color = vbWhite
    .AxisTitle.Caption = "Nachdruckzeit [s]"
  End With

  'y-axis
  With .Axes(xlValue)
    .HasTitle = True
    .MinimumScale = yMin
    .MaximumScale = yMax
    .TickLabels.Font.Color = vbWhite
    .AxisTitle.Font.Size = 12
    .AxisTitle.Font.Color = vbWhite
    .AxisTitle.Caption = "Masse [g]"
  End With
End With


Application.ScreenUpdating = True
ActiveSheet.Protect

End Sub


...