HERBERS Excel-Forum - das Archiv
bei Veränderung keine Aktualisierung
Falco

Hallo,
ich habe folgenden Code:

Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveSheet.ChartObjects("Chart 1").Chart
Select Case Target.Address
Case Is = [I53].Address
.Axes(xlCategory).MaximumScale = Target.Value
Case Is = [E53].Address
.Axes(xlCategory).MinimumScale = Target.Value
Case Is = [P47].Address
.Axes(xlCategory).MajorUnit = Target.Value
Case Is = [G46].Address
.Axes(xlValue).MaximumScale = Target.Value
Case Is = [G47].Address
.Axes(xlValue).MinimumScale = Target.Value
Case Is = [P46].Address
.Axes(xlValue).MajorUnit = Target.Value
End Select
End With
End Sub

Dieser bewirkt eine Skalierung meines Diagramms. Jedoch verändere ich die Werte in manchen Zellen nicht direkt sondern werden die berechnet.
als Bsp: P46 wird direkt in die Zelle eingetragen und das Diagramm ändert das Intervall. Bei I53 ist der Zellinhalt mit I53=A1+A2 berechnet. Die Zelle rechnet natürlich richtig und aktualisiert sich selbst aber diese Art von Zelländerung bewirkt keine Änderung im Diagramm. Auch nicht wenn im Anschluss eine "direkte" Zelle verändert wird.
Wie kann ich die Aktualisierung in den VBA Code mit integrieren?

Worksheet_Calculate (owT)
EtoPHG


AW: Worksheet_Calculate (owT)
Falco

Wenn ich _Change durch _Calculate ersetzte dann funktioniert nichts mehr. Hatte es vorher schon ausprobiert.

...Weil Worksheet_Calculate kein Target hat, ...
Luc:-?

…Falco;
das musst du ändern/anpassen!
Tipp: Ereignisprozeduren nicht ein-/zusammenkopieren, sondern stets anlegen (Auswahl in den beiden Kopfmenüs)!
Gruß, Luc :-?
Besser informiert mit …

AW: ...Weil Worksheet_Calculate kein Target hat, ...
Falco

so also nicht ...?
Private Sub Worksheet_Calculate(ByVal Target As Range)
With ActiveSheet.ChartObjects("Chart 1").Chart
Select Case Target.Address
Case Is = [I53].Address
.Axes(xlCategory).MaximumScale = Target.Value
wo müsste es genau hin? Das Target ist ja angegeben O.o

Wenn du machen würdest, was ich dir geraten ...
Luc:-?

…habe, Falco,
würdest du sehen, das VBA den Prozedurkopf so anlegt:
Private Sub Worksheet_Calculate()
Du musst also die zu bearbeitenden Bereiche normal deklarieren, die Prozedur selbst hat keine Parameter.
Luc :-?

AW: bei Veränderung keine Aktualisierung
Luschi

Hallo Falco,
Du mußt nicht die Zelle 'I53' überwachen sondern die Zellen 'Ai' & 'A2', denn hier ist der Auslöser für die Änderung der Zelle 'I53' durch eine Formel. Formeln lösen aber das 'Worksheet_Change'-Ereignis aus, sondern nur manuelle eingaben und Wertänderungen mittels Vba, deshalb so:
Private Sub Worksheet_Change(ByVal Target As Range)
    With ActiveSheet.ChartObjects("Chart 1").Chart
        Select Case Target.Address(0, 0)
            Case "A1", "A2"
                .Axes(xlCategory).MaximumScale = [I53].Value
            Case "E53"
                .Axes(xlCategory).MinimumScale = Target.Value
            Case Is = "P47"
                .Axes(xlCategory).MajorUnit = Target.Value
            Case Is = "G46"
                .Axes(xlValue).MaximumScale = Target.Value
            Case Is = "G47"
                .Axes(xlValue).MinimumScale = Target.Value
            Case "P46"
                .Axes(xlValue).MajorUnit = Target.Value
        End Select
    End With
 End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Gruß von Luschi
aus klein-Paris

Du hast 1 'nicht' vergessen, Luschi! ;-) Gruß owT
Luc:-?

:-?

AW: Du hast 1 'nicht' vergessen
Falco

Es funktioniert :)
Danke
Wieder bisschen an VBA Verständnis dazu bekommen

bei Veränderung keine Aktualisierung
Falco

Hallo,
ich habe folgenden Code:

Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveSheet.ChartObjects("Chart 1").Chart
Select Case Target.Address
Case Is = [I53].Address
.Axes(xlCategory).MaximumScale = Target.Value
Case Is = [E53].Address
.Axes(xlCategory).MinimumScale = Target.Value
Case Is = [P47].Address
.Axes(xlCategory).MajorUnit = Target.Value
Case Is = [G46].Address
.Axes(xlValue).MaximumScale = Target.Value
Case Is = [G47].Address
.Axes(xlValue).MinimumScale = Target.Value
Case Is = [P46].Address
.Axes(xlValue).MajorUnit = Target.Value
End Select
End With
End Sub

Dieser bewirkt eine Skalierung meines Diagramms. Jedoch verändere ich die Werte in manchen Zellen nicht direkt sondern werden die berechnet.
als Bsp: P46 wird direkt in die Zelle eingetragen und das Diagramm ändert das Intervall. Bei I53 ist der Zellinhalt mit I53=A1+A2 berechnet. Die Zelle rechnet natürlich richtig und aktualisiert sich selbst aber diese Art von Zelländerung bewirkt keine Änderung im Diagramm. Auch nicht wenn im Anschluss eine "direkte" Zelle verändert wird.
Wie kann ich die Aktualisierung in den VBA Code mit integrieren?

Worksheet_Calculate (owT)
EtoPHG


AW: Worksheet_Calculate (owT)
Falco

Wenn ich _Change durch _Calculate ersetzte dann funktioniert nichts mehr. Hatte es vorher schon ausprobiert.

...Weil Worksheet_Calculate kein Target hat, ...
Luc:-?

…Falco;
das musst du ändern/anpassen!
Tipp: Ereignisprozeduren nicht ein-/zusammenkopieren, sondern stets anlegen (Auswahl in den beiden Kopfmenüs)!
Gruß, Luc :-?
Besser informiert mit …

AW: ...Weil Worksheet_Calculate kein Target hat, ...
Falco

so also nicht ...?
Private Sub Worksheet_Calculate(ByVal Target As Range)
With ActiveSheet.ChartObjects("Chart 1").Chart
Select Case Target.Address
Case Is = [I53].Address
.Axes(xlCategory).MaximumScale = Target.Value
wo müsste es genau hin? Das Target ist ja angegeben O.o

Wenn du machen würdest, was ich dir geraten ...
Luc:-?

…habe, Falco,
würdest du sehen, das VBA den Prozedurkopf so anlegt:
Private Sub Worksheet_Calculate()
Du musst also die zu bearbeitenden Bereiche normal deklarieren, die Prozedur selbst hat keine Parameter.
Luc :-?

AW: bei Veränderung keine Aktualisierung
Luschi

Hallo Falco,
Du mußt nicht die Zelle 'I53' überwachen sondern die Zellen 'Ai' & 'A2', denn hier ist der Auslöser für die Änderung der Zelle 'I53' durch eine Formel. Formeln lösen aber das 'Worksheet_Change'-Ereignis aus, sondern nur manuelle eingaben und Wertänderungen mittels Vba, deshalb so:
Private Sub Worksheet_Change(ByVal Target As Range)
    With ActiveSheet.ChartObjects("Chart 1").Chart
        Select Case Target.Address(0, 0)
            Case "A1", "A2"
                .Axes(xlCategory).MaximumScale = [I53].Value
            Case "E53"
                .Axes(xlCategory).MinimumScale = Target.Value
            Case Is = "P47"
                .Axes(xlCategory).MajorUnit = Target.Value
            Case Is = "G46"
                .Axes(xlValue).MaximumScale = Target.Value
            Case Is = "G47"
                .Axes(xlValue).MinimumScale = Target.Value
            Case "P46"
                .Axes(xlValue).MajorUnit = Target.Value
        End Select
    End With
 End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Gruß von Luschi
aus klein-Paris

Du hast 1 'nicht' vergessen, Luschi! ;-) Gruß owT
Luc:-?

:-?

AW: Du hast 1 'nicht' vergessen
Falco

Es funktioniert :)
Danke
Wieder bisschen an VBA Verständnis dazu bekommen

Bewerten Sie hier bitte das Excel-Portal