Страницы: 1
RSS
Макрос для установки мин макс осей диаграммы, не получается настроить код, сам не компетентен, продобвал сложить сам из нескольких.
 
Добрый день,помогите исправить  Код:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [AD3]) Is Nothing Then
    Min_ = [AU3]
    Max_ = [AT3]
    For i = 1 To ActiveSheet.ChartObjects.Count
    Set ChartObjects(i).Axes(xlValue).MinimumScale = Min_
    Set ChartObjects(i).Axes(xlValue).MaximumScale = Max_
    Target.Select
    Next
   End If
End Sub

останавливается на Set и выдает ошибку Object doesn't support this property or
method (Error 438)
 
Роман Козаченко, оператор Set не нужен, т.к. у параметров тип Double, а не Object. Как-то так:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [AD3]) Is Nothing Then
    Dim Min_ As Double, Max_ As Double
    Min_ = CDbl([AU3].Value2)
    Max_ = CDbl([AT3].Value2)
    For i = 1 To ActiveSheet.ChartObjects.Count
    ChartObjects(i).Axes(xlValue).MinimumScale = Min_
    ChartObjects(i).Axes(xlValue).MaximumScale = Max_
    Target.Select
    Next
   End If
End Sub
Изменено: Irregular Expression - 21.06.2018 11:02:40
 
Спасибо, попробовал на 7й строке останавливается с той-же ошибкой.
Но работает этот корявый код:
Код:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [AD3]) Is Nothing Then
    Min_ = [AU3]
    Max_ = [AT3]
    ActiveSheet.ChartObjects("диаграмма 5").Activate
    ActiveChart.Axes(xlValue).MinimumScale = Min_
    ActiveChart.Axes(xlValue).MaximumScale = Max_
    Target.Select
    Min_ = [AU3]
    Max_ = [AT3]
    ActiveSheet.ChartObjects("диаграмма 7").Activate
    ActiveChart.Axes(xlValue).MinimumScale = Min_
    ActiveChart.Axes(xlValue).MaximumScale = Max_
    Target.Select
    Min_ = [AU3]
    Max_ = [AT3]
    ActiveSheet.ChartObjects("диаграмма 8").Activate
    ActiveChart.Axes(xlValue).MinimumScale = Min_
    ActiveChart.Axes(xlValue).MaximumScale = Max_
    Target.Select
   End If
End Sub
Изменено: Roman Kozak - 25.06.2018 16:30:15
 
Ну, уж при 135 сообщениях должны знать, как оформлять код в сообщении. Исправьте.
 
Roman Kozak, приложите пример диаграммы, посмотрим.
 
vikttur, да я с кодами и не работал, не знаю как
 
Цитата
Irregular Expression написал: приложите пример диаграммы, посмотрим.
 
Roman Kozak, ларчик Ваш открывается просто:
1) посмотрите какие имена диаграмм запрашиваются в коде, и какие у Вас на листе. Отсюда Run-time error.
2) посмотрите, что у Вас в ячейках AT3 и AU3, из которых берутся значения для значений осей. Там должны быть числа, а не буквы "МВ". Отсюда Type mismatch error.
3) наконец, в цикле, перебирая коллекцию ChartObjects Вам надо обращаться к внутреннему объекту диаграммы Chart, а не самому ChartObject, чтобы использовать свойство Axes. Почему при вызове ChartObject'а по имени без цикла свойство Axes у него находится, а при вызове в цикле по индексу объекта - нет, признаться, не знаю. Надо вникать в работу интерпретатора VBA. Но ChartObjects(i).Chart.Axes(xlValues) отрабатывает в цикле успешно. Отсюда Object doesn't support this property or method.

Вот так выглядит рабочий код для Вашего примера:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [AD3]) Is Nothing Then
    Min_ = [AV3]
    Max_ = [AU3]
    
    With ActiveSheet
    For i = 1 To .ChartObjects.Count
        With .ChartObjects(i).Chart.Axes(xlValue)
             .MinimumScale = Min_
             .MaximumScale = Max_
        End With
    Next i
    End With
   End If
End Sub
Изменено: Irregular Expression - 22.06.2018 10:06:41
 
Irregular Expression, Спасибо! Работает.
 
Roman Kozak, замечание модератора и Ваш #3.
 
Цитата
Roman Kozak написал: я с кодами и не работал, не знаю как
Кнопка <...> на панели над полем для сообщения
 
Цитата
Roman Kozak написал:
да я с кодами и не работал, не знаю как
А в стартовом сообщении как же тогда получилось? )
 
модератор постарался.
 
Спасибо за ликбез
Страницы: 1
Наверх