Excel VBA: обновление минимальных, максимальных и значений единиц измерения по осям с помощью нажатия кнопки - PullRequest
0 голосов
/ 15 мая 2018

Я был бы глубоко признателен за помощь в динамическом обновлении значения оси X в виде гистограммы Excel с помощью формул EITHER или в VBA-коде.

Я безуспешно пробовал следующее :

--- Создал именованный диапазон в 3 ячейках в листе (Q2, R2 и S2), которые всегда будут содержать случайно обновленные значения для:

Минимум по оси X,

Максимум по оси X и

Единицы основной оси X.

Затем введите следующееформула для каждого из соответствующих полей данных интерфейса интерфейса /Format.Axis/Axis.Options для всех этих 3 переменных ...:

= MAIN! XMIN

= MAIN! XMAX

= MAIN! XUNITS

/Format.Axis/Axis.Options dialog-interface

... соответственно, где "MAIN" - это имя, которое я присвоил Sheet1.

Однако поля данных интерфейса диалога не сохраняют формулы, а просто возвращаются к тем данным, которые были там ранее.

АльтернативаВ частности, я попытался решить эту проблему с помощью VBA, используя следующие варианты алгоритма, привязанные к кнопке ActiveX-Control с именем «ReCalibrateButton».

Пожалуйста, помогите мне определить, какая из следующих итераций алгоритма наиболее эффективнаи ближе всего к точному;а также то, что отсутствует или неправильно, и препятствует его успешной работе:

(алгоритм # 1)

Private Sub ReCalibrateButton_Click()
  Dim wsChart As Chart
  Dim wsInput As Worksheet

  Set wsChart = EAMPVPMSChart 
  Set wsInput = ThisWorkbook.Sheets("MAIN")
  With wsChart
    With .Axes(xlCategory)
        .MinimumScale = wsInput.Range("Q2").Value
        .MaximumScale = wsInput.Range("R2").Value           
        .MajorUnit = wsInput.Range("S2").Value
    End With
  End With
End Sub

При запуске этот алгоритм, к сожалению, выдает следующую ошибку = "CompileОшибка: переменная не определена "

Что я пропустил или сделал неправильно в этом алгоритме?

(Алгоритм # 2)

Private Sub ReCalibrateButton_Click()
  Dim objCht As ChartObject
  For Each objCht In ActiveSheet.ChartObjects
    With objCht.Chart
      ' Value (X) Axis
      With .Axes(xlCategory)
        .MinimumScale = ActiveSheet.Range("Q2").Value
        .MaximumScale = ActiveSheet.Range("R2").Value
        .MajorUnit = ActiveSheet.Range("S2").Value
      End With
    End With
  Next objCht
End Sub

При запуске этоАлгоритм, к сожалению, выдает следующую ошибку = «Ошибка во время выполнения» -2147467259 (80004005) «Метод« MinimumScale »объекта« Ось »не выполнен»

Что я пропустил или сделал неправильно вэтот алгоритм?

(алгоритм # 3)

Private Sub ReCalibrateButton_Click()
  Dim wsChart As Chart
  Dim wsInput As Worksheet

  Set wsChart = ThisWorksheet.Charts("EAMPVPMSChart")
  Set wsInput = ThisWorkbook.Sheets("MAIN")

  With wsChart
    With .Axes(xlCategory)
        .MinimumScale = wsInput.Range("Q2").Value
        .MaximumScale = wsInput.Range("R2").Value           
        .MajorUnit = wsInput.Range("S2").Value
    End With
  End With
End Sub

При запуске этот алгоритм, к сожалению, выдает следующую ошибку = «Ошибка компиляции: переменная не определена»

Что я пропустил или сделал неправильно в этом алгоритме?

(Алгоритм # 4)

Private Sub ReCalibrateButton_Click()
    Dim wksCharts As Worksheet
    Dim oChrtObj As ChartObject

    Set wksCharts = Worksheets("MAIN")
    With wksCharts.ChartObjects("EAMPVPMSChart").Chart
            oChrtObj.Chart.Axes(xlCategory).MinimumScale = ActiveSheet.Range("Q2").Value
            oChrtObj.Chart.Axes(xlCategory).MaximumScale = ActiveSheet.Range("R2").Value
            oChrtObj.Chart.Axes(xlCategory).MaximumScale = ActiveSheet.Range("S2").Value
    End With
End Sub

При запуске этот алгоритм, к сожалению, выдает следующую ошибку = "Ошибка времени выполнения «91»: переменная объекта или переменная блокаle not set "

Что я пропустил или сделал неправильно в этом алгоритме?

(Алгоритм # 5)

Private Sub ReCalibrateButton_Click()
    ActiveSheet.ChartObjects("EAMPVPMSChart").Activate
    With Application.ActiveChart.Axes(xlCategory, xlPrimary)
            .MinimumScale = wsInput.Range("Q2").Value
            .MaximumScale = wsInput.Range("R2").Value
            .MajorUnit = wsInput.Range("S2").Value
    End With
End Sub

При запуске этот алгоритм, к сожалению,выдает следующую ошибку = «Ошибка компиляции: переменная не определена»

Что я пропустил или сделал неправильно в этом алгоритме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...