VBA-Problem

U

uwe44k

Hallo an alle,
ich weiß nicht ob ich hier richtig bin, hab auch im Forum nicht gesucht weil ich neu hier bin und mich hier nicht auskenne.
Meine Frage:
Ich habe eine Tabelle (logisch - sonst wär ich nicht hier) in der ich Tageseingaben mache mit Werten.
Also: Spalte A Spalte B
01.01.09 - Wert 35
02.01.09 - Wert 48
bis zum 31.12.09

Jetzt habe ich Monatsdiagramme die den Wert pro Tag farblich anzeigen.

Meine Formel dazu:

Privat Sub Worksheet_Change (ByVal Target As Range)

Dim WertG, WertG_Vor, WertB, WertB-Vor, Zelle
Zelle = Target.Adress(0, 0)

'Monatsdiagramm:

ActiveSheet.ChartObjects("Diagramm 1").Activate
AktivateChart.Axes(xlValue).Select
With AktivateChart.Axes(xlValue)
.MinimumScale = WertG - 5
.MaximumScale = WertG + 5
CrossesAt = - 5
AktivateChart.Axes(xlValue).Select
Selction.TickLabels.AutoScale.Font
With Selection.TickLabes.Font
If WertG > WertG_Vor Then
.ColorIndex = 3
Elseif WertG < WertG_Vor Then
.ColorIndex = 10
Elseif WertG = WertG_Vor Then
.ColorIndex = xlAutomatic
End If
End With
End With

End Sub

Meine Frage jetzt dazu:
Wenn ich die Formel in einem Modul kopiere und den Befehl "Monatsdiagramm" auskommentiere, warum Springt dann VBA nicht in den Modul?

Ich hoffe ich hab es genügend erklärt, für Schreibfehler übernehm ich keine Haftung und vielen Dank für eure Antworten

Gruß Uwe
 
Wie rufst du deine prozedure auf?

Hier noch den Code formatiert, damit es andere leichter haben um den Code zu lesen
Visual Basic:
Privat Sub Worksheet_Change (ByVal Target As Range)

	Dim WertG, WertG_Vor, WertB, WertB-Vor, Zelle
	Zelle = Target.Adress(0, 0)
	
	'Monatsdiagramm:
	
	ActiveSheet.ChartObjects("Diagramm 1").Activate
	AktivateChart.Axes(xlValue).Select
	With AktivateChart.Axes(xlValue)
		.MinimumScale = WertG - 5
		.MaximumScale = WertG + 5
		CrossesAt = - 5
		AktivateChart.Axes(xlValue).Select
		Selction.TickLabels.AutoScale.Font
		With Selection.TickLabes.Font
			If WertG > WertG_Vor Then
				.ColorIndex = 3
			Elseif WertG < WertG_Vor Then
				.ColorIndex = 10
			Elseif WertG = WertG_Vor Then
				.ColorIndex = xlAutomatic
			End If
		End With
	End With

End Sub
 
Hier der korrigierte Code (Schreibfehler von uwe44k):
Visual Basic:
Private Sub Worksheet_Change (ByVal Target As Range)
 
    Dim WertG, WertG_Vor, WertB, WertB_Vor, Zelle
    Zelle = Target.Adress(0, 0)
   
    'Monatsdiagramm:
   
    ActiveSheet.ChartObjects("Diagramm 1").Activate
    AktivateChart.Axes(xlValue).Select
    With AktivateChart.Axes(xlValue)
        .MinimumScale = WertG - 5
        .MaximumScale = WertG + 5
        CrossesAt = - 5
        AktivateChart.Axes(xlValue).Select
        Selction.TickLabels.AutoScale.Font
        With Selection.TickLabes.Font
            If WertG > WertG_Vor Then
                .ColorIndex = 3
            Elseif WertG < WertG_Vor Then
                .ColorIndex = 10
            Elseif WertG = WertG_Vor Then
                .ColorIndex = xlAutomatic
            End If
        End With
    End With
 
End Sub

Ich denke aber, du hast hier wahrscheinlich einen Logikfehler. Du schreibst, dass du den Code in ein Modul kopierst, er gehört aber in den Codebereich der Tabelle (siehe Graphik). Erst dann greift VBA bei der Zellenänderung darauf zu.


Der Doc!
 

Anhänge

  • vba.jpg
    vba.jpg
    94,8 KB · Aufrufe: 12
Danke für eure Hilfe,

der Code steht momentan im Codebereich der Tabelle. Er funktioniert auch bei Änderung der Zellen. Ich habe aber jetzt 12 Tabellen (von Jan - Dez) und wollte von Zeile 8 bis Zeile 25 in einem Modul schreiben und den Code in Modul mit Zeile 6 "Monatsdiagramm:" starten, was aber nicht funktioniert.

Gruß Uwe
 
Du musst deine Prozedure umbenammsen
Visual Basic:
'alt:
Private Sub Worksheet_Change (ByVal Target As Range)

'neu:
Private Sub myFunction (ByVal Target As Range)

Anschliessend hinter deiner Tabelle die folgend sub setzen.
Visual Basic:
Private Sub Worksheet_Change (ByVal Target As Range)
    Call myFunction(Target)
End Sub
 
Zurück