SheetChange in Vba einbinden?
31.05.2004 16:43:24
maggie
arbeite mit einer vb form die ein excel-diagramm besitzt, meine frage:
wie kann bzw. soll ich den folgenden code in vba einbinden, das es funktioniert ?
CODE:
Dim myTabelle As Object 'Excel.Worksheet '
Private Sub Chart1_SheetChange(ByVal Sh As OWC10.Worksheet, ByVal Target As OWC10.Range)
Dim AktProz As Double, Gesamt As Double, Groesser As Double, Kleiner As Double, Zeilen As Long
'Prüfen ob richtige Tabelle
If Sh.Name <> "Tabelle1" Then Exit Sub
'Anzahl Datenzeilen
Zeilen = (Sh.Range("ProzKumX").Row + Sh.Range("ProzKumX").Rows.Count - 1)
'Prüfen ob veränderte Zelle eine Kumulierte Prozenzahl ist
If (Target.Column <> Sh.Range("ProzKumX").Column) Or (Target.Row = 1) Or (Target.Row > Zeilen) Then Exit Sub
On Error GoTo Ende
'Events ausschalten, damit diese Procedure sich nicht selbst aufruft
Target.Application.EnableEvents = False
'eingebenen Wert merken
AktProz = Target.Value
'Formel wiederherstellen
Target.Formula = "=(C" & Target.Row & "*100/E1)"
' Prüfen, ob 1. Zeile < 100
If AktProz <= 0 Or AktProz > 100 Then
MsgBox "0 <= Prozente < 100 !"
GoTo Ende
ElseIf Target.Row = 2 And AktProz = 100 Then
MsgBox "In der 1. Zeile können nicht 100 Prozent erreicht werden !"
GoTo Ende
' Prüfen, ob letzte Zeile = 100
ElseIf Target.Row = Zeilen Then
MsgBox "In der letzten Zeile müssen 100 Prozent erreicht werden !"
GoTo Ende
End If
'Zielwertberechnung
Groesser = Target.Application.Evaluate("Sum(A" & Target.Row + 1 & ":A" & Zeilen & ")")
Kleiner = Target.Application.Evaluate("Sum(A1:A" & Target.Row - 1 & ")")
Gesamt = Groesser / (1 - (AktProz / 100))
Target.Offset(0, -2).Value = Gesamt * (AktProz / 100) - Kleiner
Ende:
'Events einschalten
Target.Application.EnableEvents = True
End Sub
Private Sub UserForm_Initialize()
Dim i As Long
Set myTabelle = Me.Controls("Chart1").object.Sheets(1)
myTabelle.Application.EnableEvents = False
With myTabelle
.Cells(1, 1).Value = "Delta X"
.Cells(1, 2).Value = "Y-Wert"
.Cells(1, 3).Value = "Kum X"
.Cells(1, 4).Value = "KumXProz"
.Cells(1, 5).Formula = "=Sum(A:A)"
For i = 2 To 10
.Cells(i, 1) = Rnd() * 100 - 30
.Cells(i, 2) = Rnd() * 100
.Cells(i, 3).Formula = "=Sum(A2:A" & i & ")"
.Cells(i, 4).Formula = "=(C" & i & "*100/E1)"
Next
End With
myTabelle.Parent.Names.Add Name:="Tabelle1!ProzKumX", RefersToR1C1:="=OFFSET(Tabelle1!R1C4,1,,COUNTA(Tabelle1!C1)-1,)"
myTabelle.Application.EnableEvents = True
End Sub
habe es in die arbeitsmappe rein getan aber der compiler meckert.
bei: controls
Set myTabelle = Me.Controls("Chart1").object.Sheets(1)
kann mir jemand helfen?
maggie