AW: Auswertungen bearbeiten+ Wert an Zelle zurückg
15.09.2006 15:00:41
Oberschlumpf
Hi Catie :-)
Schön, freut mich, dass du voran kommst.
Ich erkläre dir jetzt mal den ganzen VBA-Code. Brauchst ja nur das lesen, was dich interessiert:
'alles an Code, was nach der folgenden Zeile kommt, wird ausgeführt, wenn sich der Wert einer Zelle verändert
Private Sub Worksheet_Change(ByVal Target As Range)
'mit Dim werden Variablen deklariert (lies dir für mehr Info die Excel-Hilfe zu diesem Befehl durch)
'warum ich hier DIm ... verwende, erkläre ich gesondert weiter unten
Dim lwsProj1 As Worksheet
'mit der nächsten Zeile wird der Bereich bestimmt, bei dessen Wertveränderung dieser Code ausgeführt werden soll
'd. h., generell gilt das Ereignis Worksheet_Change dann, wenn der Wert einer
'beliebigen Zelle verändert wird
'aber hier wollen wir ja gar nicht, dass dieser Code auch dann gestartet wird,
'wenn sich z Bsp der Wert in A1 ändert.
'deswegen "bestimmen" wir mit der nächsten Zeile, dass der Code nur dann aus-
'geführt werden soll, wenn sich der Wert in einer der Zellen B519:F519 ändert
If Not Intersect(Target, Range("$B$519:$F$519")) Is Nothing Then '<-- den Bereich in den $-Zeichen musst du für jedes Blatt anpassen
'die nächste Zeile schaltet Ereignis-Reaktionen aus
'da der gesamte Code Veränderungen im Sheet "PTS Calibration" vornimmt, und
'da auch in dem Sheet an gleicher Stelle fast der selbe Code steht, würde
'auch im Sheet "PTS Calibration" das Ereignis Worksheet_Change gestartet werden
'und der Code, der da steht, würde starten - das Ganze hätte eine Endlos-
'schleife zur Folge, und Excel würde sich aufhängen :-)
'um so etwas vermeiden zu können, kann man Ereignis-Reaktionen abschalten
Application.EnableEvents = False
'in der nächsten Zeile wird der Variablen lwsProj1 ein Wert zugewiesen - in diesem Fall
'ein bestimmter Sheet-Name
Set lwsProj1 = Sheets("Project1") '<-- hier musst du immer DEN Sheet-Namen eintragen,
'in dessen Change-Ereignis dieser Code steht
'die nächste Zeile "öffnet" einen "Container", in dem man auf alle Ereig-
'nisse, Methoden usw des "Containers" zugreifen kann.
'benutzt du nicht diesen Container, musst du immer anstelle von
'".Range(Zelle).Value" den Befehl "Sheets("PTS Calibration").Range(Zelle).Value" schreiben
'diese "Container" ermöglichen es, dass man nicht immer das gleiche schreiben muss
With Sheets("PTS Calibration")
'hier werden den Zellen C3:G3 im Sheet "PTS Calibration" die Werte aus
'den Zellen B519:F519 aus dem Sheet "Project1" übertragen
.Range("C3").Value = lwsProj1.Range("B519").Value
.Range("D3").Value = lwsProj1.Range("C519").Value
.Range("E3").Value = lwsProj1.Range("D519").Value
.Range("F3").Value = lwsProj1.Range("E519").Value
.Range("G3").Value = lwsProj1.Range("F519").Value
End With
'in der nächsten Zeile wird die zuvor belegte Variable wieder auf Null gesetzt
Set lwsProj1 = Nothing
'in der nächsten Zeile wird die Ereignis-Überwachung wieder eingeschaltet
'wenn du diese Zeile nach dem Ausschalten mal vergessen solltest, wird
'kein VBA-Code mehr ausgeführt - egal, welches Ereignis eintritt
Application.EnableEvents = True
End If
End Sub
Und nun zu der Variablen lwsProj1.
Ich verwende diese Variable nur wegen Schreibfaulheit :-)
Würde ich die DIM-Zeile weglassen, müsste ich in diesem Fall jede Zeile, die lwsProj1 enthält, so schreiben:
Sheets("Project1").Range("B519").Value
im Vergleich
lwsProj1.Range("B519").Value
ist doch um ein paar Zeichen kürzer, oder? :)
Anstelle von lwsProj1 hätte ich die Variable auch einfach nur X nennen können.
Dann würden all die Zeilen so aussehen:
X.Range("B519").Value
(was noch kürzer ist :-) )
Aber X ist nicht sehr aussagefähig. Wenn in einem Makro viele Variablen verwendet werden, kommt man schnell durcheinander, wenn man sie z Bsp nur "a" "b" "X" etc nennt.
Die Variable lwsProj1 habe ich so genannt weil:
l = es handelt sich um eine (l)okale Variable - es gibt auch sogenannte Public-Variablen, die nenn ich am Anfang immer p...
ws = kennzeichnet den Typ der Variablen - es gibt String (str), Integer (i), Double (db) usw Variablen - ws ist eine (w)ork(s)heet-Viariable
Proj1 = nur ein Kürzel für Project1, damit ich auch später noch weiß, um welches Sheet es sich handelt.
Sooooo....Text zu Ende - ich habe fertig! :-)
Konnte ich helfen?
Ciao
Thorsten