Discussion:
Eisenbahn mit Excel bauen
(zu alt für eine Antwort)
Hans Alborg
2014-08-18 19:22:43 UTC
Permalink
Hallooo nochmal,

ich hab im Netz garnichts gefunden, wundert mich ja ein bisserl...

Hab die Zellen quadratisch formatiert und einige schwarz gefärbt, so daß es
wie eine Leiter wirkt, oder halt wie Schienen. Das passt auf 7 Zeilen.
Dann soll(te) ein Zug aus 3 Fahrzeugen drauf lang fahren.

Das bedeutet, daß (je Fahrzeug 18 Spalten Platz) der "Zug" immer einen 18'er
Block weiterfährt (wenn ich den Schienenteil vor ihm anklicke) und nach dem
3.Fahrzeug (also der 2. Hänger) wieder das freie Gleis erscheint.
Zum Schluß verschwindet der Zug indem der jew. nächste Waggon in die letzte
Position kopiert wird bis am Ende das freie Gleis übrig bleibt. Am Anfang
ist es andersrum.

Das Kopieren erfordert Zellbereiche die teils verbundene Zellen haben
(Fahrzeuge) oder Einzelzellen (Gleis).
Man bräuchte fertige Zellbereiche zum reinkopieren. Allerdings müßten die
von einem Hilfsblatt stammen, da das Arbeitsblatt fies und komplett
verändert/ gelöscht wird.

Inzwischen bin ich von der Draufsicht auf die Sicht von der Seite her
gekommen. Das Gleis von der Seite besteht nur noch aus 2 Zeilen: eine
komplett schwarze für die Schiene und darunter eine schwarz/ weiße für die
Schwellen. Damit braucht das Gleis beim Kopieren nicht mehr dabei sein.
Lok und Wagen sehen im Profil auch besser aus (leider eben -im Netz- keine
Beispiele).
Ich hab sie mit Zellrahmen "gezeichnet", die Räder sind aus Windings.

Jetzt zur Frage: wie kopiere ich am besten die Teile vom Hilfsblatt?
Ist es besser, Lok, Wagen1, Wagen2 und Hintergrund (!) als Variable zu
erfassen oder jedesmal vom Hilfsblatt zu nehmen?
Geht das mit Namen für die Zellbereiche vergeben (was wird mit den Namen bei
der Kopie?)
Wie gesagt besteht ein Zellbereich teilweise aus verbundenen, teils aus
normalen Zellen. Größe ist je 8 Zeilen x 18 Spalten.
Ich möchte nicht nach jedem kopieren per VBA formieren müssen...

Da der Zug in beide Richtungen (nicht in einem Programmdurchlauf) fahren
soll muß auch noch alles doppelt "gebaut" werden.

Äh, zum Verständnis: das ist Teil einer Simulation :-)

Hans
Claus Busch
2014-08-19 05:58:21 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Jetzt zur Frage: wie kopiere ich am besten die Teile vom Hilfsblatt?
Ist es besser, Lok, Wagen1, Wagen2 und Hintergrund (!) als Variable zu
erfassen oder jedesmal vom Hilfsblatt zu nehmen?
Geht das mit Namen für die Zellbereiche vergeben (was wird mit den Namen bei
der Kopie?)
Wie gesagt besteht ein Zellbereich teilweise aus verbundenen, teils aus
normalen Zellen. Größe ist je 8 Zeilen x 18 Spalten.
Ich möchte nicht nach jedem kopieren per VBA formieren müssen...
ich würde den Zug aus den Formen zusammensetzen. Die kannst du für die
Bewegung auch mit ihrem Namen anspechen.
Wenn du aus dem Hilfsblatt kopieren möchtest, würde ich das Ganze als
Grafik kopieren. Es bleibt zusammen, es ändert nichts am Format und du
kannst es auch als Einheit ansprechen, da es ja ein Bild ist.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2014-08-19 14:12:54 UTC
Permalink
Hi Claus,

"Claus Busch" schrieb...
Post by Claus Busch
Post by Hans Alborg
Jetzt zur Frage: wie kopiere ich am besten die Teile vom Hilfsblatt?
Ist es besser, Lok, Wagen1, Wagen2 und Hintergrund (!) als Variable zu
erfassen oder jedesmal vom Hilfsblatt zu nehmen?
ich würde den Zug aus den Formen zusammensetzen.
Vielleicht meinen wir dasselbe.
Ich hab 5 Variable definiert, als Object:

Dim Voranzeiger As Object
Dim Lok As Object
Dim Wagen_1 As Object
Dim Wagen_2 As Object
Dim Hintergrund_leer As Object

dann z.B.:

Set Voranzeiger = Sheets("Hilfsblatt-1").Range("A10:R20")

Also betrachte ich jeden Teil des Zuges einzeln als Variable. Vor die Lok
gehört eine Aufforderung zum Klicken und nach dem letzten Wagen ein Feld nur
mit dem Hintergrund (um den letzten Wagen dort zu ersetzen).
Im Bereich Sheets("Hilfsblatt-1").Range("A10:R20") gibt es also ein Schild
"Bitte hier klicken".

Aber mit

shAu.Cells(153, i).Value = Voranzeiger
oder
shAu.Cells(153, i) = Voranzeiger

geht das nicht, es kommt eine Fehlermeldung. Deklariere ich die Variable als
Range passiert dasselbe.
Post by Claus Busch
Die kannst du für die Bewegung auch mit ihrem Namen anspechen.
Die "Bewegung" ist ja nur dauerndes löschen und kopieren bzw. lieber nur
draufkopieren.
Da wird's wohl mit den Namen (für Zellbereiche) durcheinanderkommen. Die
Namen für Variablen sind mir da schon handlicher.
Post by Claus Busch
Wenn du aus dem Hilfsblatt kopieren möchtest, würde ich das Ganze als
Grafik kopieren. Es bleibt zusammen, es ändert nichts am Format und du
kannst es auch als Einheit ansprechen, da es ja ein Bild ist.

Anfang und Ende der "Fahrt" wird wie bei einem Tunnel wirken, d.h. erst ist
das Schild zu sehen, dann -Klick- die Lok (Schild eins vor), dann Wagen 1
(Lok + Schild eins vor) usw., also müssen die Teile getrennt sein.
Am Fahrtende ist es ähnlich (nur umgekehrt, und das Schild bleibt auf dem
letzten Feld bis Wagen 2 weg ist).

Übrigens: für einen anderen Teil der Mappe werden bereits Zellbereiche als
Grafik hergeholt.
Für den vorliegenden Zweck finde ich aber Grafiken nicht gut, weil die
Plazierung zu unsicher ist (Cursorabhängig usw.).

Bleibt die Frage was sich aus

shAu.Cells(153, i).Value = Voranzeiger

machen läßt. Ehe das nicht läuft weiß ich nicht ob verbundene Zellen und
fremdländische Schriften mit übertragen werden...

Hans
Claus Busch
2014-08-19 14:33:12 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Die "Bewegung" ist ja nur dauerndes löschen und kopieren bzw. lieber nur
draufkopieren.
Da wird's wohl mit den Namen (für Zellbereiche) durcheinanderkommen. Die
Namen für Variablen sind mir da schon handlicher.
ich habe jetzt mal aus verbundenen und eingefärbten Zellen eine Lok
gebaut. Den Bereich habe ich als Grafik kopiert und in Blatt1 als Grafik
eingefügt. Diese Grafik hat dann automatisch den Namen "Picture 1".

Dazu dann eine Prozedur die die Left-Eigenschaftes des Zuges verändert
(Zug fährt von rechts nach links) kombiniert mit Application.Wait.
Da nur die Left-Eigenschaft verändert wird, fährt der Zug absolut gerade
wie auf Schienen.
Mit dem Versatz nach links und Verändern der Zeit kannst du herum
spielen, bis die Lok zügig fährt:

Sub Fahrt()
With ActiveSheet
Do
.Shapes("Picture 1").Left = .Shapes("Picture 1").Left - 3
Application.Wait Now + TimeSerial(0, 0, 1)
Loop While .Shapes("Picture 1").Left > 0
End With

End Sub



Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Claus Busch
2014-08-19 14:51:10 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Also betrachte ich jeden Teil des Zuges einzeln als Variable. Vor die Lok
gehört eine Aufforderung zum Klicken und nach dem letzten Wagen ein Feld nur
mit dem Hintergrund (um den letzten Wagen dort zu ersetzen).
Im Bereich Sheets("Hilfsblatt-1").Range("A10:R20") gibt es also ein Schild
"Bitte hier klicken".
schau mal hier:
https://onedrive.live.com/?cid=9378AAB6121822A3&id=9378AAB6121822A3%21326#cid=9378AAB6121822A3&id=9378AAB6121822A3%21326
nach "Zug"
Du musst die Datei herunterladen, denn in OneDrive sind Makros
deaktiviert.
Es ist nur eine symbolische Lok zusammengesetzt aus Formen, die danach
gruppiert wurden, damit das Ganze als Einheit betrachtet wird.
Starte einfach mal das Makro "Fahrt"


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2014-08-19 16:04:05 UTC
Permalink
Hallo Claus,

"Claus Busch" schrieb...
Hans Alborg:.
Post by Hans Alborg
Also betrachte ich jeden Teil des Zuges einzeln als Variable.
schau mal hier: [...]
Es ist nur eine symbolische Lok zusammengesetzt aus Formen, die danach
gruppiert wurden, damit das Ganze als Einheit betrachtet wird. Starte
einfach mal das Makro "Fahrt"
Ok. So geht das also.

Ich muß dann mal gucken wie es in meiner Mappe mit beweglichen Grafiken
geht.

Die Loks und Waggons sind ja Teil einer Simulation, sie belegen immer 3
Abschnitte (der Tabelle) wo dann Reaktionen erfolgen: Zugspitze, Zugmitte
und Zugende.
Dazu ist es eher hinderlich, wenn der Zug "glatt durchläuft". Mit einem
Klick vor die Lok wird diese -und der Rest- jeweils in die nächste Spalte
der Tabelle bewegt (die 18 Columns breit ist).
In den Spalten erfolgen dann Abfragen und Reaktionen auf diese Positionen,
die ich beobachten kann. Das Klicken ist eine Art Schrittbetrieb für die
Simulation.

Ob das mit Grafiken sinnvoll ist, muß ich erst in Ruhe testen.
Ist natürlich toll was es dann für Darstellungsmöglichkeiten gäbe.

Hans
Claus Busch
2014-08-19 16:15:26 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Die Loks und Waggons sind ja Teil einer Simulation, sie belegen immer 3
Abschnitte (der Tabelle) wo dann Reaktionen erfolgen: Zugspitze, Zugmitte
und Zugende.
du kannst die verschiedenen Zellen in Tabelle2 als Grafik kopieren, in
Tabelle1 als Grafik einfügen und dann zusammensetzen. Dann kannst du
jedes Teil der Grafik mit gedrückter STRG-Taste anklicken und wenn alles
markiert ist, mit Rechtsklick "Gruppieren" auswählen. Damit wäre das
Ganze dann ein Objekt und du müsstest nur für ein Objekt die
Left-Eigenschaft verändern.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Claus Busch
2014-08-19 16:18:11 UTC
Permalink
Hallo nochmal,
Post by Hans Alborg
Dazu ist es eher hinderlich, wenn der Zug "glatt durchläuft". Mit einem
Klick vor die Lok wird diese -und der Rest- jeweils in die nächste Spalte
der Tabelle bewegt (die 18 Columns breit ist).
dazu kannst du dann das Worksheet_SelectionChange-Ereignis nutzen und
dort dann eingeben ActiveSheet.Shapes("Group 1").Left = Target.Left
Damit wandert er dann bei Klick in die Zelle zur entsprechenden Zelle.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2014-08-19 18:35:51 UTC
Permalink
"Claus Busch" schrieb...
dazu kannst du dann das Worksheet_SelectionChange-Ereignis nutzen und dort
dann eingeben ActiveSheet.Shapes("Group 1").Left = Target.Left Damit
wandert er dann bei Klick in die Zelle zur entsprechenden Zelle.
Das ist das was in der Tabelle schon passiert an anderer Stelle. Ich klicke
in einen Zellbereich bestimmter Farbe, woraufhin als Grafik ein Zellbereich
eines anderen Blattes erstellt und angezeigt wird. Der ist zur Information
gedacht und wird bald wieder gelöscht (händisch).

Die Positionierung dieser Grafiken war so unzuverlässig, daß ich
Offsettwerte bestimmen mußte und ggf. vorher noch anders gelegene Zellen per
VBA selektieren mußte.

Unter diesen Voraussetzungen sehe ich den Grafik- Zug etwas skeptisch.
Ich werde keine Zelle anklicken für die Weiterfahrt, sondern die verbundenen
Zellen 18x10. Ob die Grafiklok mit den Rädern dann richtig auf die Schiene
kommt?
Und es kann zu Namensproblemen mit o.genannten Grafiken kommen.

Na, das zu testen wird etwas dauern...

schönen Abend noch!

Hans
Peter Schuerer
2014-08-22 17:36:43 UTC
Permalink
Hallo Hans,

nur mal so als Frage (ist vielleicht eine Anregung für mich):
Wieso machst Du eine Simulation, und dann noch für einen Zug , in Excel?
Gibt es da nicht bessere Programme?

MfG
Peter
Post by Hans Alborg
"Claus Busch" schrieb...
Post by Claus Busch
dazu kannst du dann das Worksheet_SelectionChange-Ereignis nutzen und
dort dann eingeben ActiveSheet.Shapes("Group 1").Left = Target.Left
Damit wandert er dann bei Klick in die Zelle zur entsprechenden Zelle.
Das ist das was in der Tabelle schon passiert an anderer Stelle. Ich
klicke in einen Zellbereich bestimmter Farbe, woraufhin als Grafik ein
Zellbereich eines anderen Blattes erstellt und angezeigt wird. Der ist
zur Information gedacht und wird bald wieder gelöscht (händisch).
Die Positionierung dieser Grafiken war so unzuverlässig, daß ich
Offsettwerte bestimmen mußte und ggf. vorher noch anders gelegene Zellen
per VBA selektieren mußte.
Unter diesen Voraussetzungen sehe ich den Grafik- Zug etwas skeptisch.
Ich werde keine Zelle anklicken für die Weiterfahrt, sondern die
verbundenen Zellen 18x10. Ob die Grafiklok mit den Rädern dann richtig
auf die Schiene kommt?
Und es kann zu Namensproblemen mit o.genannten Grafiken kommen.
Na, das zu testen wird etwas dauern...
schönen Abend noch!
Hans
Hans Alborg
2014-08-23 15:16:50 UTC
Permalink
"Peter Schuerer" schrieb...
Post by Peter Schuerer
Wieso machst Du eine Simulation, und dann noch für einen Zug , in Excel?
Gibt es da nicht bessere Programme?
Das beste Programm ist das wo man sich am meisten auskennt. Ich mach fast
alles mit Excel und VBA, wobei Claus meine 20% Ahnung sehr aufstockt.
Was dieses Projekt betrifft: das macht viel Spaß, und hat
hinterlistigerweise ziemlich simpel begonnen :-(

Und wegen des Zuges: der ist Nebensache, es geht um das Erstellen Schaltung.
So ein Zug peppt die Simu auf und es reizt einen, das hinzubekommen (erst
hatte ich nur Rechtecke!).

Die Simu ist die Erstellung einer bahnspezifischen Schaltung aus vielen
Einzelelementen. Das geht bis dahin, wo ein Signal auf Fahrt kommt.

Dann fährt normalerweise ein "Zug" los (per Klick) und betätigt über viele
Aktoren die Schaltung so, daß alles wieder in Normalstellung gelangt.
Da die Schaltung in Tabellenform entsteht, fährt dann in Zeile 153...160 der
Zug durch die Tabelle, vom Start zum Ziel (4...50 Spalten je nach
Fahrstrecke).
Schalter, Relais etc. sind als "Rahmengrafik" ausgeführt und werden (hier)
entspr. den Positionen von Lok und Wagen verändert.

Es gibt sehr viele Details, die ich noch programmieren muß, z.B. alles was
der Zug noch auslöst. Der Zug ändert auch in vielen Abschnitten garnichts
und muß die überspringen...
Na, ich krieg das auch bald hin...

Hans
Claus Busch
2014-08-23 18:27:17 UTC
Permalink
Hallo Peter,
Post by Peter Schuerer
Wieso machst Du eine Simulation, und dann noch für einen Zug , in Excel?
Gibt es da nicht bessere Programme?
mit Excel kannst du alles machen außer Kaffee kochen ;-)
Schau z.B. mal hier:
https://www.google.com/search?q=japaner+malt+mit+excel&sourceid=ie7&rls=com.microsoft:de-DE:IE-SearchBox&ie=&oe=&gws_rd=ssl
Mich reizt es geradezu, immer wieder etwas Neues mit Excel zu machen,
etwas Ungewohntes. Ich will immer wieder die Grenzen von Excel
ausreizen.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Claus Busch
2014-08-23 09:18:30 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Unter diesen Voraussetzungen sehe ich den Grafik- Zug etwas skeptisch.
Ich werde keine Zelle anklicken für die Weiterfahrt, sondern die verbundenen
Zellen 18x10. Ob die Grafiklok mit den Rädern dann richtig auf die Schiene
kommt?
Und es kann zu Namensproblemen mit o.genannten Grafiken kommen.
schau nochmals bei OneDrive vorbei. Bei "Zug" habe ich jetzt noch ein 2.
Blatt, in dem du den Zug mit zwei Wagen besser dosiert mit einem
Schieberegler bewegen kannst.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2014-08-23 15:45:52 UTC
Permalink
Hi Claus,

"Claus Busch" schrieb...
Post by Claus Busch
Post by Hans Alborg
Unter diesen Voraussetzungen sehe ich den Grafik- Zug etwas skeptisch.
schau nochmals bei OneDrive vorbei. Bei "Zug" habe ich jetzt noch ein
2.Blatt, in dem du den Zug mit zwei Wagen besser dosiert mit einem
Schieberegler bewegen kannst.
Jo ich guck gleich mal.

Aber ich war ja nicht ganz faul: hab eine Lok und 2 Waggons ge-äh-malt
(keine Gruppierungen!) und auf das Hilfsblatt gebracht. Also insgesamt 6
Fahrzeuge wegen zwei Fahrtrichtungen.
Dein erster Vorschlag hat mich doch überzeugt Grafiken zu nutzen.

Das Schild "Bitte zum Weiterfahren hier klicken" (o.ä.) wird aber mit VBA
generiert und auch gelöscht.

Dann ist mir bewußt geworden, daß der Zug nicht in jedem Abschnitt was
bewirken darf, es gibt nur bestimmte.
Die (deren Startspalten) erfasse ich mit einem Datenarray.
Soweit bin ich jetzt.


Weiter folgt...
Die Lok darf also durchaus sofort in die Startspalte gesetzt werden, das
Schild erscheint (wenn das Signal auf Fahrt geht) auf der nächsten Spalte
laut dem Array.
Beim Klick wird das Schild gelöscht, in der nächsten Arrayspalte wieder
erzeugt und die Lok zur eben frei gewordenen Arrayspalte bewegt.

Das werden ziemliche Sprünge, so daß ich über diese Left...Änderung
nachdenke, wie Du sie vorgeschlagen hast. Dann muß die Lok aber an der
richtigen Stelle halten.
Aber wie das dann mit den 2 Waggons werden soll weiß ich noch nicht. Sinn
war ja, daß Spitze, Mitte und Ende des Zuges dargestellt werden, also auf 3
der Arrayspalten!!!

Das würde den Zug immer auseinanderziehen und wieder zusammenstauchen, je
nach Entfernung der Arrayspalten voneinander.
Das hat mit programmieren nichts zu tun, sondern mit der Art der Simulation.
Wenn ich den Zug zusammenließe, würde schon nur die Lok reichen.

Was mir noch nicht ganz klar ist: wie kann ich die Position der Lok
erfassen, wenn sie in dem entsprechenden Abschnitt kommt.
Meine Vorstellung dazu ist, einfach den Klick vorher zu nutzen.

Hans
Claus Busch
2014-08-23 16:02:30 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Aber wie das dann mit den 2 Waggons werden soll weiß ich noch nicht. Sinn
war ja, daß Spitze, Mitte und Ende des Zuges dargestellt werden, also auf 3
der Arrayspalten!!!
schau dir das Beispiel mit dem Schieberegler an. Die beiden Wagen und
die Lok sind nicht gruppiert.
Wenn ich das Sheet aktiviere, wird der Abstand1 von Lok.Left zu
Wagen1.Left und Abstand2 von Lok.Left zu Wagen2.Left genommen und
festgeschrieben.
Dann wird der Zug bewegt mit
Lok.Left=Schieberegler1.value
Wagen1.left=Schieberegler1.value + Abstand1
Damit bleibt der Zug immer in gleichen Abstand zueinander


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2014-08-23 17:55:14 UTC
Permalink
"Claus Busch" schrieb...

Hallo Hans,
Post by Hans Alborg
Aber wie das dann mit den 2 Waggons werden soll weiß ich noch nicht. Sinn
war ja, daß Spitze, Mitte und Ende des Zuges dargestellt werden, also auf
3 der Arrayspalten!!!
schau dir das Beispiel mit dem Schieberegler an. Die beiden Wagen und die
Lok sind nicht gruppiert.
Wenn ich das Sheet aktiviere, wird der Abstand1 von Lok.Left zu
Wagen1.Left und Abstand2 von Lok.Left zu Wagen2.Left genommen und
festgeschrieben.
[...] Damit bleibt der Zug immer in gleichen Abstand zueinander
Ja genau. Aber bei mir werden die Positionen der einzelnen Fahrzeuge ganz
verschieden sein müssen, und zwar bei jeder Bewegung um eine Stelle weiter.
Halt an den Spaltenpositionen, die im Array stehen:

jj = 0
For j = 3 To intLetzte_myNr Step 18
If Cells(169, j + 6).Value = "M_relais" Then
jj = jj + 1
Mr_Gruppen(jj) = Cells(152, j).Value
End If
Next j

Also die Spalten Mr_Gruppen(jj) (das Array) sind die Positionen für Lok und
Wagen. Sie sind nicht hintereinander oder in gleichem Abstand voneinander.
Das wird nicht gut aussehen, und wie ich das angehe muß ich erst noch
probieren.
Auf jeden Fall muß ich die Position der Fahrzeuge von einer Zelle [Spalte
Mr_Gruppen(jj)] abhängig machen.
Was ich in Deinem Beispiel gesehen habe ist daß der Left- Wert nicht vom
Zoom (und Monitorgröße?) abhängt. Sieht so aus als ginge es auf diese Art.

Ob ich es dann wirklich so mache... das wird gräßlich aussehen. Aber
technisch korrekt.

Hihi! Ich könnte die Waggons auch langziehen!

Jedenfalls: die Fahrzeuge starr hintereinander sieht toll aus, macht aber
für die Simulation wieder keinen Sinn :-(

Hans
Claus Busch
2014-08-23 18:01:50 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Jedenfalls: die Fahrzeuge starr hintereinander sieht toll aus, macht aber
für die Simulation wieder keinen Sinn :-(
ich blicke immer noch nicht so richtig durch, was du erreichen willst.
Daher sind meine Vorschläge immer nur rein theoretisch.
Du könntest die Lok an den gewünschten Punkt bringen und dann nach
kurzer Wartezeit mit Application.Wait einen Wagen nach dem anderen an
diesen Punkt + dem vorherigen Abstand bringen.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Claus Busch
2014-08-23 21:29:47 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Jedenfalls: die Fahrzeuge starr hintereinander sieht toll aus, macht aber
für die Simulation wieder keinen Sinn :-(
ich habe noch ein weiteres Blatt eingefügt. Dort kannst du in die
"Schiene" klicken (graue Zeile). Dann setzt sich die Lok in Bewegung bis
in die geklickte Zelle und zeitversetzt dann die Wagen. Der Zug zieht
sich also auseinander und setzt sich wieder zusammen.
Außerdem ist unten links ein SpinButton. Mit dem kannst du den Zug
einfach drehen, um dann in die andere Richtung zu fahren.

Jetzt hast du einige Anregungen und kannst damit mal rum spielen ;-)

Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2014-08-24 10:19:11 UTC
Permalink
Hi Claus,

"Claus Busch" schrieb...
Post by Claus Busch
Post by Hans Alborg
Jedenfalls: die Fahrzeuge starr hintereinander sieht toll aus, macht aber
für die Simulation wieder keinen Sinn :-(
ich habe noch ein weiteres Blatt eingefügt. Dort kannst du in die
"Schiene" klicken (graue Zeile). Dann setzt sich die Lok in Bewegung bis
in die geklickte Zelle und zeitversetzt dann die Wagen. Der Zug zieht sich
also auseinander und setzt sich wieder zusammen.
Das sind alles so Sachen, die mir bestimmt ein paar Anregungen liefern...
Post by Claus Busch
Außerdem ist unten links ein SpinButton. Mit dem kannst du den Zug einfach
drehen, um dann in die andere Richtung zu fahren.
"Gedreht" mußt Du beweisen! Mach' mal einen Schornstein dran...
(irgendwann war die Fahrtrichtung vertauscht...)

In einem Durchlauf der Simu gibt es nur eine bestimmte Richtung. Die wird
ganz zuerst festgelegt.
Am Ende wird das Blatt wieder komplett gelöscht (Zellen löschen, n.L.
verschieben, wodurch sich Buttons auf dem Blatt verbieten).
Post by Claus Busch
[ich blicke immer noch nicht so richtig durch, was du erreichen willst.]
Mal als Buchstabengrafik...

Z X X X G X X G G X X X X G X X X S
S L

Obere Reihe: S= Start, X= keine Aktoren (der Zug bewirkt nichts), G = Gleis
(mit Aktoren).
- Jeder Buchstabe bedeutet eine Tabellenspalte mit 18 Columns. G und X
kommen willkürlich verteilt vor.

Untere Reihe: S= Schild "hier klicken", L= Lok.
- Jedes einzelne Fahrzeug (Lok, Wagen und auch das Schild) nimmt die Breite
von 18 Columns ein. Der ganze Zug paßt ergo nicht in eine Spalte.

Das wäre die Startsituation bei einer Fahrt von rechts nach links.
Die Lok wird in der Startspalte bereitgestellt (obwohl es da auch keine
Aktoren gibt). Das Schild steht in der nächsten Aktoren- Position.

Nach Klick auf das Schild wird dieses an die nächste G- (also Aktoren-)
Position gesetzt, das Schild an der alten Position gelöscht und die Lok an
diese Stelle versetzt.

Beim nächsten Durchgang dann der erste Waggon, dann der zweite. Immer auf
den G- Positionen. Lok und Schild auch immer ein "G" weiter.

Ob die Waggons auch zuerst vom Hilfsblatt auf die S- Stelle kopiert werden
oder gleich zum frei werdenden G weiß ich noch nicht.

Am Ziel ist das auch noch so eine Sache.
Das Schild soll solange im Ziel bleiben, wie Klicken nötig ist.
Wenn also die Lok auf Z kommt bleibt das Schild auch da (es ist ja eine
"Zellgrafik").
Die Lok läßt auch noch eine Schildecke frei, damit bleibt es klickbar.

Also nächster Klick- die Lok wird gelöscht und die Wagen je ein G vorgesetzt
bzw. der erste Wagen auf Z.
Jetzt wird allerdings das Schild verdeckt sein, mal sehn, evtl. stauche ich
den Wagen im Ziel etwas...

Nächster Klick- der Wagen wird gelöscht (Schild bleibt) und der letzte Wagen
geht auf Z.
Der wird wohl wieder gestaucht.

Nächster Klick: Wagen und Schild verschwinden, alles ist frei und Klicken
bringt nichts mehr.
Fertig.

So stelle ich mir den Ablauf vor. Fahrten von L.n.R. genauso. Da immer nur
eine Fahrt simuliert wird, braucht der Zug nicht umdrehen.

Natürlich geht es noch darum, die Positionen der Fahrzeuge in den "G"-
Spalten zu erfassen und da Aktionen auszulösen.
Was die X- Spalten betrifft, werden dort Vorgänge ablaufen, die wieder von
den "G"- Spalten initiiert werden, nur als Info.
Ich hoffe das war jetzt etwas verständlicher :-<

Ich will auch versuchen, die Fahrzeuge mit der Left- Funktion zu bewegen,
damit es flüssiger aussieht. Mal sehen.

Hans
Claus Busch
2014-08-24 10:43:17 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
"Gedreht" mußt Du beweisen! Mach' mal einen Schornstein dran...
(irgendwann war die Fahrtrichtung vertauscht...)
so weit habe ich nicht gedacht, da meine Wagen und die Lok symmetrisch
sind. Ich habe nur umgehängt. Aber die Grafiken würden sich auch drehen
lassen.
Post by Hans Alborg
Also nächster Klick- die Lok wird gelöscht und die Wagen je ein G vorgesetzt
bzw. der erste Wagen auf Z.
Jetzt wird allerdings das Schild verdeckt sein, mal sehn, evtl. stauche ich
den Wagen im Ziel etwas...
Die Grafiken werden übereinander gelegt, da ein Left-Wert < 0 nicht
machbar ist. Wenn du dann die andere Richtung fährst, passen sie sich
wieder an. Fahre mal meinen Zug auf 0 und drehe dann den Zug, da siehst
du das.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2014-08-24 14:22:21 UTC
Permalink
Hallo,

"Claus Busch" schrieb...
Post by Claus Busch
Post by Hans Alborg
"Gedreht" mußt Du beweisen!
so weit habe ich nicht gedacht, da meine Wagen und die Lok symmetrisch
sind. Ich habe nur umgehängt. Aber die Grafiken würden sich auch drehen lassen.
Mh, ich habe hier "richtige" Fahrzeuge: eine kleine Dampflok und zwei
Güterwagen.
Grafiken (Pfeile) hab ich auch schon gedreht, mit einer Winkelangabe.
Die Lok stünde dann allerdings Kopf. Also gibt es auch eine Spiegelfunktion?
Post by Claus Busch
Post by Hans Alborg
Also nächster Klick- die Lok wird gelöscht und...
Die Grafiken werden übereinander gelegt, da ein Left-Wert < 0 nicht
machbar ist.
Wegen gelöschter Lok (dann Wagen1,2) sollte am Ende keine Grafiküberlappung
passieren.
Der linke Tabellenrand ist auch nicht bei 0, sie beginnt ab Spalte C. Aber
egal.

Hab vorhin gemerkt, daß "Call hier_klicken_Schild (Mr_Gruppen(jj))" nicht
geht! Mist!

Hans
Claus Busch
2014-08-24 14:51:23 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Mh, ich habe hier "richtige" Fahrzeuge: eine kleine Dampflok und zwei
Güterwagen.
Grafiken (Pfeile) hab ich auch schon gedreht, mit einer Winkelangabe.
Die Lok stünde dann allerdings Kopf. Also gibt es auch eine Spiegelfunktion?
passe den Namen deiner Grafik an und probiere es mal so:
With ActiveSheet
.Shapes("Wagen2").Flip msoFlipHorizontal
End With


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Claus Busch
2014-08-24 19:18:52 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Wegen gelöschter Lok (dann Wagen1,2) sollte am Ende keine Grafiküberlappung
passieren.
du musst nicht unbedingt löschen. Stelle doch beide Züge an der
richtigen Stelle auf die Schienen und stelle sie umeinander mit
With ActiveSheet
.Shapes("Lok1").visible = False
end with
unsichtbar bzw. sichtbar.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Claus Busch
2014-08-24 19:29:40 UTC
Permalink
Hallo nochmals,
Post by Claus Busch
With ActiveSheet
.Shapes("Lok1").visible = False
end with
unsichtbar bzw. sichtbar.
oder du tauschst einfach die Ansichten:

Sub AnsichtWechsel()
With Sheets("Tabelle1")
.Shapes("_Lok1").Visible = _
IIf(.Shapes("_Lok1").Visible = True, False, True)
.Shapes("_Lok2").Visible = _
IIf(.Shapes("_Lok2").Visible = True, False, True)
End With
End Sub

Dabei wird die ausgeblendete Lok eingeblendet und umgekehrt


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Claus Busch
2014-08-24 19:47:26 UTC
Permalink
Hallo Hans,
Post by Claus Busch
Sub AnsichtWechsel()
With Sheets("Tabelle1")
.Shapes("_Lok1").Visible = _
IIf(.Shapes("_Lok1").Visible = True, False, True)
.Shapes("_Lok2").Visible = _
IIf(.Shapes("_Lok2").Visible = True, False, True)
End With
End Sub
Dabei wird die ausgeblendete Lok eingeblendet und umgekehrt
noch eine Idee:
Du kopierst die Fahrzeuge so oft wie du Haltepunkte hast, stellst sie
schon an den Haltepunkten auf und schaltest dann bei Klick _Lok1
unsichtbar, _Lok2 sichtbar.
Wenn du den Zug auseinander ziehen willst, also die Wagen und Lok
getrennt fahren lassen willst, kannst du dir einen Counter einfügen.
Wenn Counter = 0 dann _Lok2 sichtbar, _Lok1 unsichtbar.
Counter = Counter +1. Dann weiter mit den Wagen und Counter hochzählen.
Bei 3 wird dann _Lok3 sichtbar und _Lok2 unsichtbar. Wenn dann das Ziel
erreicht ist, stellst du den Counter zurück. Wenn dann der Counter z.B.
15 erreicht hat, kannst du im Code schreiben:
Counter =IIF(Counter <15, Counter +1, 0)
Du bräuchtest kein Left, kein Drehen der Fahrzeuge. Alles wäre schon am
richtigen Platz auf der Schiene.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2014-08-25 07:04:07 UTC
Permalink
Hi Claus,

"Claus Busch" schrieb...
Post by Claus Busch
Du kopierst die Fahrzeuge so oft wie du Haltepunkte hast, stellst sie
schon an den Haltepunkten auf und schaltest dann bei Klick _Lok1
unsichtbar, _Lok2 sichtbar.
... Counter...
Wenn dann das Ziel erreicht ist, stellst du den Counter zurück.
Wenn das Ziel erreicht ist, ist die Simulation zuende. Dann gibt's nur noch
sich die Einzelheiten nach der Zugfahrt anzusehen, evtl. einen Teil zu
drucken und alles zu löschen, das ganze Blatt.

Der Zug fährt in der Realität natürlich weiter, verläßt den Abschnitt den
ich simuliere. Daher soll er in der Simu "stückweise" am Ziel verschwinden.

Das ist alles!
Post by Claus Busch
Du bräuchtest kein Left,
Das möchte ich nur deshalb nutzen, damit sich die Fahrzeuge sichtbar
bewegen! Dein erstes "Zug"- Beispiel hat mir da den Mund wässrig gemacht;-)
Post by Claus Busch
kein Drehen der Fahrzeuge.
Fällt ja eh' weg, weil die andere Fahrtrichtung ein ganz neuer
Simulationsdurchlauf wäre (s.o.).
Post by Claus Busch
Alles wäre schon am richtigen Platz auf der Schiene.
Ich muß so oder so den richtigen Ablauf darstellen. Und dann wären die Teile
auch wieder ruckweise vorhanden (von Spielchen wie Transparenz von 0...100%
langsam hochfahren mal abgesehen).

Nööö, ich mag Left!

Bin aber noch nicht soweit...

Ähem, mit "wait" werde ich nichts programmieren, da die Mappe auf
verschieden flinken/ lahmen Rechnern läuft.

Hans
Hans Alborg
2014-08-25 12:45:55 UTC
Permalink
"Hans Alborg" schrieb...
Post by Hans Alborg
Der Zug fährt in der Realität natürlich weiter, verläßt den Abschnitt den
ich simuliere. Daher soll er in der Simu "stückweise" am Ziel
verschwinden.
Har har! Mit Left bis > 3 lief die Lok eben aus der Tabelle raus (welche ja
ab Spalte C beginnt; und A ist ziemlich breit)!
Jetzt hätte direkt Lust, die Grafik z.B. bei Left = 50 links 30° zu
drehen!!!

Was ich jetzt gern wüßte:

zum Kopieren (Paste) der Lok selektiere ich eine Zelle.

shAu.Pictures.Paste

Kann ich ohne Select an eine bestimmte Zellposition kopieren?

Dann- mit dem Leftwert ist das auch so ein Ding:

bei einer großen Tabelle paßt ja nicht alles auf den Schirm.
Ich würde lieber die Strecken von einem Haltepunkt zum nächsten angeben.
Überhaupt ist da wohl eine Berechnung Left- Wert prozentual zur Zellposition
nötig.

Da finde ich aber bestimmt was im Netz!

Hans
Claus Busch
2014-08-25 12:59:13 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
zum Kopieren (Paste) der Lok selektiere ich eine Zelle.
shAu.Pictures.Paste
Kann ich ohne Select an eine bestimmte Zellposition kopieren?
Einfach irgendwo einkopieren und direkt verschieben mit

With Activesheet.Shapes("shAU")
.left=DeinegewünschteZelle.Left
.top=DeinegewünschteZelle.Top
end with

Eventuell musst du zu den Werten noch die Width oder Height des Bildes
addieren oder subtrahieren.
Post by Hans Alborg
bei einer großen Tabelle paßt ja nicht alles auf den Schirm.
Ich würde lieber die Strecken von einem Haltepunkt zum nächsten angeben.
Überhaupt ist da wohl eine Berechnung Left- Wert prozentual zur Zellposition
nötig.
Lese im Direktfenster die Left-Werte der entsprechenden Position aus,
z.B. mit
?Range("H15").left
Eventuell muss du während der Fahrt auch noch einen Scroll machen.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2014-08-25 14:43:57 UTC
Permalink
Hallo,

"Claus Busch" schrieb...
Hans Alborg
Einfach irgendwo einkopieren und direkt verschieben mit
With Activesheet.Shapes("shAU")
.left=DeinegewünschteZelle.Left
.top=DeinegewünschteZelle.Top
end with
Aha, also geht kopieren nicht direkt an eine bestimmte Stelle.
Statt 'With Activesheet.Shapes("shAU") brauche ich ja nur With Shapes("Lok")
zu schreiben?
Den Namen der frischen Kopie lege ich immer sofort nach dem Einkopieren
fest.
Eventuell musst du zu den Werten noch die Width oder Height des Bildes
addieren oder subtrahieren.
Ok. Damit fällt wohl das nervige Scrollen zu Zeile 153 weg :-)

Das ist aber nur für das Kopieren der Fahrzeuge vom Hilfsblatt nötig.
Für das Bewegen des Zugs gibt's ja das Klickschild am nächsten Haltepunkt.
bei einer großen Tabelle paßt ja nicht alles auf den Schirm. Ich würde
lieber die Strecken von einem Haltepunkt zum nächsten angeben.
Lese im Direktfenster die Left-Werte der entsprechenden Position aus, z.B.
mit ?Range("H15").left
Eventuell muss du während der Fahrt auch noch einen Scroll machen.
Daaaaas muß ich noch sehen. Es soll auch bei/nach jedem Zoom klappen.
Schlimmstenfalls muß ich beim Erstellen des "Haltstellen- Arrays" die
Positionswerte der entspr. Zellen mit speichern.
Interessant wird, ob die nach dem Scrollen noch passen.

Wenigstens, seit ich Target.Left (aus Deinem Zug-Beispiel) als Variable
hernehme, fährt die Lok jetzt schon wohin geklickt wird...

Hans
Hans Alborg
2014-08-31 15:21:54 UTC
Permalink
So, ab heute fahren die Excel- Züge -korrekt- in meiner Mappe. Und die
Fahrzeuge lösen auch schon die nächsten Schritte der Simulation aus.
Statt die Grafiken im Ziel zu stauchen um ans Klickschild darunter zu
kommen, habe ich dem im Ziel einfach längere Stiele gegönnt. Damit hat man
den Klickbereich oberhalb der Fahrzeuge!
So läuft jetzt alles Bestens!

Danke für Deine Tips Claus!

...und eine neue Frage, in einem neuen Thema ;-)

Hans

Hans Alborg
2014-08-24 19:41:11 UTC
Permalink
Hi Claus,

"Claus Busch" schrieb.net...
du musst nicht unbedingt löschen. Stelle doch beide Züge an der richtigen
Stelle auf die Schienen und stelle sie umeinander mit
With ActiveSheet
.Shapes("Lok1").visible = False
end with
unsichtbar bzw. sichtbar.
Auch das geht. Aber wo liegt der Vorteil?

Wichtiger finde ich -später- ob ich durch das Fahrzeug durchklicken kann
(ich glaub vor Jahren hab ich sowas schon geschafft), die Transparenz ändern
oder eben die Grafiken stauchen.
[.Shapes("Wagen2").Flip msoFlipHorizontal]
Genau, Flip heißt spiegeln. Was so alles geht...

In einer anderen Mappe nutze ich bei einer Grafik auch das Mouseover-
Ereignis.
Interessante Sachen!

Hans
Lesen Sie weiter auf narkive:
Loading...