Discussion:
Zellensprung nach vorgegebene Koordinaten
(zu alt für eine Antwort)
Walter Heying
2008-06-13 22:51:29 UTC
Permalink
Hallo,

ich habe in einem Blatt eine Tabelle, in der die Mitarbeiter von links
nach rechts angegeben werden und ein fortlaufendes Datum von oben nach
unten. Jede Eingabe in einer Zelle (vorgegebene Alternativen -
Gültigkeit) soll bewirken, dass in einem anderen Blatt die
entsprechende Zelle ausgewählt wird und dort eine Formel eingetragen
wird und anschließend diese Formel zu einem Wert eingefroren wird
(Wertekopie). Wie kann ich dieses mit Excel lösen? Zwei Dinge kann ich
nicht umsetzen: 1. das Ereignismakro durchzuführen, wenn ich einen
Zelleneinrag vorgenommen habe und 2. der Sprung in die entsprechende
Zelle des zweiten Blattes
Die Formel eintragen und eine Wertekopie darauf zu legen kann ich vba
umsetzen.

Über jede Hilfe bin ich dankbar!

Gruß
Walter
Peter Schleif
2008-06-14 07:20:41 UTC
Permalink
Post by Walter Heying
Wie kann ich dieses mit Excel lösen? Zwei Dinge kann ich
nicht umsetzen: 1. das Ereignismakro durchzuführen, wenn ich einen
Zelleneinrag vorgenommen habe und 2. der Sprung in die entsprechende
Zelle des zweiten Blattes
Die Ereignisprozedur heißt Worksheet_Change und um in eine Zelle in
einem anderen Blatt zu springen, musst Du erst das Blatt und dann die
Zelle selektieren. Etwa so:

Tabelle2.Select
Tabelle2.Range("C3").Select

Allerdings ist das _nicht_ erforderlich, wenn Du dort nur einen Wert
eintragen willst. Der Code unten gehört in den VBA-Bereich deiner
Mitarbeiter-Tabelle. Damit das Worksheet_Change-Ereignis nicht blind
auf jede Eingabe reagiert, wird geprüft, ob die geänderte Zelle im
richtigen Bereich liegt (hier B2:D4) und ob tatsächlich nur eine
einzelne Zelle geändert wurde. Die Abschaltung der Application.Events
verhindert, dass die Prozedur selbst ein Change-Ereignis auslöst. Das
ist hier zwar eigentlich überflüssig, weil die Änderungen ja in
Tabelle2 stattfinden, ich baue es aber standardmäßig in
Worksheet_Change ein.

Peter

+-----+------------+-------+--------+---------+
| | A | B | C | D |
+-----+------------+-------+--------+---------+
| 1 | | Meier | Müller | Schmitz |
+-----+------------+-------+--------+---------+
| 2 | 14.06.2008 | | | |
+-----+------------+-------+--------+---------+
| 3 | 15.06.2008 | | | |
+-----+------------+-------+--------+---------+
| 4 | 16.06.2008 | | | |
+-----+------------+-------+--------+---------+


Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo fehler
Application.EnableEvents = False

If Target.Cells.Count = 1 And _
Not Intersect(Target, Range("B2:D4")) Is Nothing Then
Tabelle2.Select '/kann entfallen/
Tabelle2.Range(Target.Address).Select '/kann entfallen/
Tabelle2.Range(Target.Address) = Target
End If

fehler:
Application.EnableEvents = True
End Sub
Thomas Ramel
2008-06-14 09:49:09 UTC
Permalink
Grüezi Walter

Walter Heying schrieb am 14.06.2008
Post by Walter Heying
ich habe in einem Blatt eine Tabelle, in der die Mitarbeiter von links
nach rechts angegeben werden und ein fortlaufendes Datum von oben nach
unten. Jede Eingabe in einer Zelle (vorgegebene Alternativen -
Gültigkeit) soll bewirken, dass in einem anderen Blatt die
entsprechende Zelle ausgewählt wird und dort eine Formel eingetragen
wird und anschließend diese Formel zu einem Wert eingefroren wird
(Wertekopie). Wie kann ich dieses mit Excel lösen? Zwei Dinge kann ich
nicht umsetzen: 1. das Ereignismakro durchzuführen, wenn ich einen
Zelleneinrag vorgenommen habe
Hier wäre wohl das WorkSheet_Change()-Ereignis geeignet.
'Target' repräsentiert darin den Bereich der geändert wurde, Du kennst
daher die Adresse in der soeben eine Änderung vorgenommen wurde
(Target.Address). Damit kannst Du den Namen aus der obersten Zeile und das
Datum in der ersten Spalte ermitteln.
Post by Walter Heying
und 2. der Sprung in die entsprechende Zelle des zweiten Blattes
Springen musst Du da nicht; es reicht aus, die Adresse zu kennen, dann
kannst du mit Range("xyz") darauf zugreifen und die Formel schreiben.

Wenn dir diese Hinweise nicht ausreichen, dann werde bitte konkret(er) in
deiner Frage:

Welches ist der Bereich in dem die Gültigkeiten stehen?
In welche Zellen soll die Formel eingetragen werden und nach welchen
Kriterien bestimmst du diese?


Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]
Microsoft Excel - Die ExpertenTipps
Walter Heying
2008-06-14 13:44:12 UTC
Permalink
Post by Thomas Ramel
Grüezi Walter
Walter Heying schrieb am 14.06.2008
Post by Walter Heying
ich habe in einem Blatt eine Tabelle, in der die Mitarbeiter von links
nach rechts angegeben werden und ein fortlaufendes Datum von oben nach
unten. Jede Eingabe in einer Zelle (vorgegebene Alternativen -
Gültigkeit) soll bewirken, dass in einem anderen Blatt die
entsprechende Zelle ausgewählt wird und dort eine Formel eingetragen
wird und anschließend diese Formel zu einem Wert eingefroren wird
(Wertekopie). Wie kann ich dieses mit Excel lösen? Zwei Dinge kann ich
nicht umsetzen: 1. das Ereignismakro durchzuführen, wenn ich einen
Zelleneinrag vorgenommen habe
Hier wäre wohl das WorkSheet_Change()-Ereignis geeignet.
'Target' repräsentiert darin den Bereich der geändert wurde, Du kennst
daher die Adresse in der soeben eine Änderung vorgenommen wurde
(Target.Address). Damit kannst Du den Namen aus der obersten Zeile und das
Datum in der ersten Spalte ermitteln.
Post by Walter Heying
und 2. der Sprung in die entsprechende Zelle des zweiten Blattes
Springen musst Du da nicht; es reicht aus, die Adresse zu kennen, dann
kannst du mit Range("xyz") darauf zugreifen und die Formel schreiben.
Wenn dir diese Hinweise nicht ausreichen, dann werde bitte konkret(er) in
Welches ist der Bereich in dem die Gültigkeiten stehen?
In welche Zellen soll die Formel eingetragen werden und nach welchen
Kriterien bestimmst du diese?
Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]
Microsoft Excel - Die ExpertenTipps
Euch beiden vielen Danke (Peter und Thomas)!
Das Ereignismakro reagiert entsprechend. Leider kommt es jedoch vor,
dass dieses nicht mehr reagiert. Jetzt z.B. habe ich eine Änderung
nach einer längeren Pause eingegeben und es kommt keine Reaktion.
@@@@ Kann es damit zusammenhängen, dass aufgrund eines
Bildschirmschonerstarts oder sonstigen anderer Tätigkeiten außerhalb
von Excel das Ereignismakro nicht mehr aktiv ist?
Hinzu kommt nun weiterhin, dass die Zelle entsprechend von drei
Koordinaten abhängig ist. Die anzusteuernde Zelle ergibt sich durch
drei Koordinaten (der Namen (x-Koordinate), das Datum (1. Y-
Koordinate) und die Schicht des angegebenen Datums (2. Y-Koordinate)).
Zur Verdeutlichung eine kleine Tabelle:
Eingabe in der Zelle Spalte Müller (X-Koordinate), Zeile 16.06.2008
(1. Y-Koordinate) und der Frühschicht (2. Y-Koordinate)

|------+-----------------+---------+---------+---------+-------------+
| | A | B | C | D | E
|
|------+-----------------+---------+---------+---------+-------------+
| 1 | | | Meier | Müller | Schmitz |
|------+-----------------+---------+---------+---------+-------------+
| 2 | 14.06.2008 | Früh | | x | |
|------+-----------------+---------+---------+---------+-------------+
| 3 | 15.06.2008 | Spät | | | |
|------+-----------------+---------+---------+---------+-------------+
| 3 | 16.06.2008 | Nacht | | | |
|------+-----------------+---------+---------+---------+-------------+
@@@@ Wie kann ich dieses umsetzen?

Gruß
walter
Peter Schleif
2008-06-14 14:57:57 UTC
Permalink
Post by Walter Heying
Das Ereignismakro reagiert entsprechend. Leider kommt es jedoch vor,
dass dieses nicht mehr reagiert. Jetzt z.B. habe ich eine Änderung
nach einer längeren Pause eingegeben und es kommt keine Reaktion.
@@@@ Kann es damit zusammenhängen, dass aufgrund eines
Bildschirmschonerstarts oder sonstigen anderer Tätigkeiten außerhalb
von Excel das Ereignismakro nicht mehr aktiv ist?
Verstehe ich nicht.

(1) Hast Du den Bereich B2:D4 an deine echte Tabelle angepasst?

(2) Bist Du sicher, dass Du am Code nichts geändert hast? Hast Du
vielleicht zu Testzwecken eine zweite Version der Prozedur eingefügt?
Worksheet_Change darf in jeder Tabelle nur einmal vorkommen.

(3) Hast Du vielleicht die Abarbeitung der Prozedur im
Einzelschritt-Modus mit F8 nachvollzogen und zwischendurch abgebrochen?

(4) Wurde die Prozedur durch Laufzeitfehler abgebrochen?

Möglicherweise ist Excel im Zustand: EnableEvents=False. Ändere doch
mal die zugehörige Zeile durch Auskommentieren:

'Application.EnableEvents = False

Anschließend Speichern. _Alle_ Excel-Mappen schließen. Excel beenden
und neu starten.
Post by Walter Heying
Hinzu kommt nun weiterhin, dass die Zelle entsprechend von drei
Koordinaten abhängig ist.
[...] Wie kann ich dieses umsetzen?
Dreidimensionale Tabellen gibt es in Excel leider (noch) nicht. Aber
sobald wir entsprechende 3D-Anzeige-Geräte haben, wird das hoffentlich
kommen. Bis dahin könntest Du pro Tag drei Zeilen reservieren. Etwa so
wie unten.

Hier noch mal ein funktionierer Code ohne die Event-Abschaltung und
passend zu der untenstehenden Tabelle. Beachte bitte die Anpassung des
Bereichs im Code. Statt B2:D4 jetzt C2:E10


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count = 1 And _
Not Intersect(Target, Range("C2:E10")) Is Nothing Then
Tabelle2.Select '/kann entfallen/
Tabelle2.Range(Target.Address).Select '/kann entfallen/
Tabelle2.Range(Target.Address) = Target
End If
End Sub


+------+------------+-------+-------+--------+---------+
| | A | B | C | D | E |
+------+------------+-------+-------+--------+---------+
| 1 | | | Meier | Müller | Schmitz |
+------+------------+-------+-------+--------+---------+
| 2 | | Früh | | | |
+------+ +-------+-------+--------+---------+
| 3 | 14.06.2008 | Spät | | | |
+------+ +-------+-------+--------+---------+
| 4 | | Nacht | | | |
+------+------------+-------+-------+--------+---------+
| 5 | | Früh | | | |
+------+ +-------+-------+--------+---------+
| 6 | 15.06.2008 | Spät | | | |
+------+ +-------+-------+--------+---------+
| 7 | | Nacht | | | |
+------+------------+-------+-------+--------+---------+
| 8 | | Früh | | | |
+------+ +-------+-------+--------+---------+
| 9 | 16.06.2008 | Spät | | | |
+------+ +-------+-------+--------+---------+
| 10 | | Nacht | | | |
+------+------------+-------+-------+--------+---------+
Walter Heying
2008-06-14 16:09:12 UTC
Permalink
Post by Peter Schleif
Post by Walter Heying
Das Ereignismakro reagiert entsprechend. Leider kommt es jedoch vor,
dass dieses nicht mehr reagiert. Jetzt z.B. habe ich eine Änderung
nach einer längeren Pause eingegeben und es kommt keine Reaktion.
@@@@ Kann es damit zusammenhängen, dass aufgrund eines
Bildschirmschonerstarts oder sonstigen anderer Tätigkeiten außerhalb
von Excel das Ereignismakro nicht mehr aktiv ist?
Verstehe ich nicht.
(1) Hast Du den Bereich B2:D4 an deine echte Tabelle angepasst?
(2) Bist Du sicher, dass Du am Code nichts geändert hast? Hast Du
vielleicht zu Testzwecken eine zweite Version der Prozedur eingefügt?
Worksheet_Change darf in jeder Tabelle nur einmal vorkommen.
(3) Hast Du vielleicht die Abarbeitung der Prozedur im
Einzelschritt-Modus mit F8 nachvollzogen und zwischendurch abgebrochen?
(4) Wurde die Prozedur durch Laufzeitfehler abgebrochen?
Möglicherweise ist Excel im Zustand: EnableEvents=False.  Ändere doch
   'Application.EnableEvents = False
Anschließend Speichern. _Alle_ Excel-Mappen schließen. Excel beenden
und neu starten.
Post by Walter Heying
Hinzu kommt nun weiterhin, dass die Zelle entsprechend von drei
Koordinaten abhängig  ist.
[...]  Wie kann ich dieses umsetzen?
Dreidimensionale Tabellen gibt es in Excel leider (noch) nicht. Aber
sobald wir entsprechende 3D-Anzeige-Geräte haben, wird das hoffentlich
kommen. Bis dahin könntest Du pro Tag drei Zeilen reservieren. Etwa so
wie unten.
Hier noch mal ein funktionierer Code ohne die Event-Abschaltung und
passend zu der untenstehenden Tabelle. Beachte bitte die Anpassung des
Bereichs im Code. Statt  B2:D4  jetzt  C2:E10
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count = 1 And _
         Not Intersect(Target, Range("C2:E10")) Is Nothing Then
      Tabelle2.Select                         '/kann entfallen/
      Tabelle2.Range(Target.Address).Select   '/kann entfallen/
      Tabelle2.Range(Target.Address) = Target
   End If
End Sub
+------+------------+-------+-------+--------+---------+
|      |     A      |   B   |   C   |   D    |    E    |
+------+------------+-------+-------+--------+---------+
|   1  |            |       | Meier | Müller | Schmitz |
+------+------------+-------+-------+--------+---------+
|   2  |            | Früh  |       |        |         |
+------+            +-------+-------+--------+---------+
|   3  | 14.06.2008 | Spät  |       |        |         |
+------+            +-------+-------+--------+---------+
|   4  |            | Nacht |       |        |         |
+------+------------+-------+-------+--------+---------+
|   5  |            | Früh  |       |        |         |
+------+            +-------+-------+--------+---------+
|   6  | 15.06.2008 | Spät  |       |        |         |
+------+            +-------+-------+--------+---------+
|   7  |            | Nacht |       |        |         |
+------+------------+-------+-------+--------+---------+
|   8  |            | Früh  |       |        |         |
+------+            +-------+-------+--------+---------+
|   9  | 16.06.2008 | Spät  |       |        |         |
+------+            +-------+-------+--------+---------+
|  10  |            | Nacht |       |        |         |
+------+------------+-------+-------+--------+---------+
Hallo Peter,

der Aufbau der 1. Tabelle ist anders als die der Tabelle, in der der
Eintrag automatisch eingetragen werden soll.
Die erste Tabelle ist folgendermaßen aufgebaut:
+------+------ +-----------------+---------------
+----------------------+
| | A | B | C |
D |
+------+------ +-----------------+---------------
+----------------------+
| 1 | | 14.06.2008 |
| |
+------+------ +-----------------+---------------
+----------------------+
| 2 | | Name | Maschine | Anwesenheit |
+------+------ +-----------------+---------------
+----------------------+
| 3 | Früh | Müller | | AUSWÄHLEN |
+------+------ +-----------------+---------------
+----------------------+
| 4 | Früh | Schmidt | |
|
:
:
In Spalte D wird jeweils eine Auswahl getroffen und aufgrund dieser
Einragung soll in Tabelle 2 in den Zellkoordinaten Müller, Früh,
14.06.2008 eine Formel eingetragen werden. Das Ergebnis soll
eingefroren werden, so dass nicht immer mehr Formeln die
Anwenderfreundlichkeit (Zeit für Berechnungen) vermiesen.
Nun kann man sich natürlich fragen, wieso denn die Tabellen
verschieden aufgebaut sind. Die Antwort ist einfach - weil die Tabelle
2 als Schnellüberblick für die Mitarbeiter gedacht ist und Tabelle 1
das Eingabeblatt ist.
Ich hoffe, dass diese ergänzenden Erläuterungen das Problem besser
verstehen lassen.

Gruß
Walter
Peter Schleif
2008-06-14 17:26:52 UTC
Permalink
Post by Walter Heying
der Aufbau der 1. Tabelle ist anders als die der Tabelle, in der der
Eintrag automatisch eingetragen werden soll.
Das hatte ich in deinem Original-Posting anders verstanden. Sorry.

Sollte aber trotzdem kein Problem sein. Allerdings wird die
Übertragung etwas komplizierter, weil wir ein Schema brauchen. Dazu
ist es _zwingend_ erforderlich den Aufbau _beider_ Tabellen zu kennen.
Deine bisherigen Postings reichen dazu nicht aus. Ich erkenne dahinter
kein System mehr. Speziell in der letzten Tabelle sind zu wenige
wiederholende Zeilen. Außerdem kommen deine Tabellen in meinem
News-Reader (aber auch bei Google-Groups) verstümmelt an.


Überlege doch mal, ob Du eine der drei folgenden Option nutzen möchtest:

1. Entferne private/geheime Informationen aus deiner Mappe. Lade sie
irgendwo hoch und poste hier den Link.

2. Poste beide Tabellen hier als Text-Tabelle. Wenn Du magst, kannst
Du dazu gerne das Excel-Tool nutzen, dass ich für diesen Zweck mal
entwickelt habe.
http://home.arcor.de/peter.schleif/Import_Export.xls

3. Schicke mir die Mappe per Mail. Das ist die *schlechteste* Option!
Du schließt damit alle anderen Teilnehmer und deren Hilfe aus.
Außerdem lese ich die Usenet-Spam-Adressen nicht. Du müßtest deine
Mail vorher hier ankündigen.

Peter
Walter Heying
2008-06-14 22:55:33 UTC
Permalink
Post by Peter Schleif
Post by Walter Heying
der Aufbau der 1. Tabelle ist anders als die der Tabelle, in der der
Eintrag automatisch eingetragen werden soll.
Das hatte ich in deinem Original-Posting anders verstanden. Sorry.
Sollte aber trotzdem kein Problem sein. Allerdings wird die
Übertragung etwas komplizierter, weil wir ein Schema brauchen. Dazu
ist es _zwingend_ erforderlich den Aufbau _beider_ Tabellen zu kennen.
Deine bisherigen Postings reichen dazu nicht aus. Ich erkenne dahinter
kein System mehr. Speziell in der letzten Tabelle sind zu wenige
wiederholende Zeilen. Außerdem kommen deine Tabellen in meinem
News-Reader (aber auch bei Google-Groups) verstümmelt an.
1. Entferne private/geheime Informationen aus deiner Mappe. Lade sie
irgendwo hoch und poste hier den Link.
2. Poste beide Tabellen hier als Text-Tabelle. Wenn Du magst, kannst
Du dazu gerne das Excel-Tool nutzen, dass ich für diesen Zweck mal
entwickelt habe.http://home.arcor.de/peter.schleif/Import_Export.xls
3. Schicke mir die Mappe per Mail. Das ist die *schlechteste* Option!
Du schließt damit alle anderen Teilnehmer und deren Hilfe aus.
Außerdem lese ich die Usenet-Spam-Adressen nicht. Du müßtest deine
Mail vorher hier ankündigen.
Peter
Hallo Peter,

siehe Link oben rechts auf meiner Homepage (www.walter-heying.de)
Auf dem Blatt "Personalfeinplanung" sollen die Eingaben durchgeführt
werden. Jeweils zwei Spalten rechts der angegebenen Namen. Ich habe
zwei Beispiele angegeben. Wenn man also eine Eingabe tätigt, dann soll
auf dem Blatt "Mitarbeiterliste" immer in die passende Zelle die
Formel eingetragen und anschließend das Ergebnis eingeforen werden.
Was also noch fehlt ist der Sprung in die richtige Zelle.

Gruß
Walter
Peter Schleif
2008-06-16 09:19:32 UTC
Permalink
Post by Walter Heying
siehe Link oben rechts auf meiner Homepage (www.walter-heying.de)
Ich finde da keine Excel-Mappe.

Peter
Walter Heying
2008-06-16 10:09:19 UTC
Permalink
Post by Peter Schleif
Post by Walter Heying
siehe Link oben rechts auf meiner Homepage (www.walter-heying.de)
Ich finde da keine Excel-Mappe.
Peter
Hallo Peter,

ich habe den Link heute Morgen herausgenommen, weil ich dachte, dass
du nicht mehr nachsiehst. Ich habe die Aufgabe des Sprungs an die
richtige Stelle nun gelöst. Jetzt bekomm ich jedoch eine
Fehlermeldung: Objektvariable oder With-Blockvariable nicht festgelegt
(Fehler 91)
Diese habe ich auch gepostet unter "Fehlermeldung: Objektvariable oder
With-Blockvariable nicht festgelegt (Fehler 91) - Wie kann ich sie
vermeiden?".
Kannst du dir einen Reim darauf machen, warum diese Meldung auftritt?

Gruß
Walter
Peter Schleif
2008-06-16 10:58:12 UTC
Permalink
Post by Walter Heying
ich habe den Link heute Morgen herausgenommen, weil ich dachte, dass
du nicht mehr nachsiehst.
Doch schon. Aber machmal nehme ich sonntags auch frei. :-)

Peter

Loading...