2016-07-01 4 views
0

Ich habe zwei Diagramme in einem Excel-Blatt ("DesiredData"), und mein Zweck besteht darin, das Diagramm mit einem größeren Wert von Maximum Scale zu bestimmen auf der Y-Achse und ändern Sie dann den Wert von Maximum Scale im anderen Diagramm. Mein Code ist:Excel-VBA: Laufzeitfehler beim Übergeben und Ändern der Achsenskalierung in Excel-Diagrammen

Sub reArrange() 
With ThisWorkbook.Sheets("DesiredData") 
    Dim maxScale1 As Long 
    Dim maxScale2 As Long 
    .ChartObjects(1).Activate 
    'runtime error at this line 
    ActiveChart.Axes(xlValue, xlPrimary).Activate 
    maxScale1 = .ChartObjects(1).Axes(xlValue, xlPrimary).MaximumScale 
    .ChartObjects(2).Activate 
    ActiveChart.Axes(xlValue, xlPrimary).Activate 
    maxScale2 = .ChartObjects(2).Axes(xlValue).MaximumScale 
    If maxScale1 > maxScale2 Then 
     .ChartObjects(2).Activate 
     .ChartObjects(2).Axes(xlValue).MaximumScale = maxScale1 
    Else 
     .ChartObjects(1).Activate 
     .ChartObjects(1).Axes(xlValue).MaximumScale = maxScale2 
    End If 
End With 
End Sub 

Es gibt Run-Time Fehler die angegebene Zeile, bitte helfen Sie mir aus.

+0

Blick auf die Objekte verwenden, so dimmen axYAxis1 und axYAxis2, dann Intellisense in VBA werden die Eigenschaften zeigen, die Sie zugreifen können. –

Antwort

0

so etwas wie dieses

Dim c As ChartObject 
Dim c2 As ChartObject 
Dim a1 As Axis 
Dim a2 As Axis 

Set c = Worksheets("Sheet1").ChartObjects(1) 

Set c2 = Worksheets("Sheet1").ChartObjects(2) 

Dim x As Chart 

Set x = c.Chart 

Set a1 = x.Axes(XlAxisType.xlValue, xlPrimary) 

Set x = c2.Chart 

Set a2 = x.Axes(XlAxisType.xlValue, xlPrimary) 

a1.MaximumScale = a2.MaximumScale 
0

Ihr Code funktioniert fast, wenn Sie einige unnötige .Activate Befehle entfernen. Zuallererst können Sie eine Achse nicht aktivieren, sondern nur auswählen. Zweitens müssen Sie keine Achse auswählen oder ein Diagramm aktivieren, um das zu tun, was Sie wollen. Sie müssen .Chart zwischen .ChartObjects(i) und .Axes(xlValue) einfügen.

Das folgende sollte wie erwartet funktionieren:

Sub reArrange() 
    Dim maxScale1 As Long 
    Dim maxScale2 As Long 
    With ThisWorkbook.Sheets("DesiredData") 
    maxScale1 = .ChartObjects(1).Chart.Axes(xlValue, xlPrimary).MaximumScale 
    maxScale2 = .ChartObjects(2).Chart.Axes(xlValue).MaximumScale 
    If maxScale1 > maxScale2 Then 
     .ChartObjects(2).Chart.Axes(xlValue).MaximumScale = maxScale1 
    Else 
     .ChartObjects(1).Chart.Axes(xlValue).MaximumScale = maxScale2 
    End If 
    End With 
End Sub 
Verwandte Themen