Discussion:
Excel Zoom Tabelle vs. Grafikobjekte
(zu alt für eine Antwort)
Hans Alborg
2015-04-10 17:37:47 UTC
Permalink
Hallo,

heute in diesem "überlääbten Forum":

Meine Eisenbahnsimu wächst und stürzt ab (naja, nur auf dem XP-1GB RAM-PC).

Ich kopiere ja Lok und Waggons als Grafik aus einem Hilfsblatt in mein
Hauptblatt um sie dort zu bewegen.
Leider muß ich bisher mit einem Manko leben:

je nach Zoomstufe wird die Lok (Wagen dito) nicht an die richtige Stelle ins
Blatt gesetzt (das wäre auf die Schiene!!). Es scheint eine Diskrepanz
zwischen Blattzoom und Kopierkoordinaten zu geben.
Jetzt während ich das schreibe, hab ich die Idee, den Zoom des Hilfsblatts
vor dem Kopieren an das Hauptblatt anzupassen, also stets beide Blätter
"syncron" zu zoomen.

Allerdings erfolgt das zoomen im Hauptblatt händisch.
Mal gucken was da zu machen ist... ein Worksheet_ZoomChange - Ereignis?.

Sind solche Diskrepanzen beim Einkopieren von Objekten bei unterschiedlichen
Zooms schon bekannt?

Hier ein kleiner Auszug nachdem das Fahrzeugs an eine beliebige Stelle ins
Hauptblatt "shAu" kopiert wurde:

With shAu.Shapes(Fzg)
.Left = Cells(153, xTS_Pos).Left + Wg_Offset
.Top = Cells(153, xTS_Pos).Top + 5
End With

So positioniere ich Lok oder Waggons.
Die Höhe von 153 Rows stimmt halt bei niedriger Zoomstufe (50...20...?)
nicht mehr, in der Regel landet das Fahrzeug "im Himmel". Bei den Columns
ist das ähnlich.

Hans
Claus Busch
2015-04-10 17:54:14 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Hier ein kleiner Auszug nachdem das Fahrzeugs an eine beliebige Stelle ins
With shAu.Shapes(Fzg)
.Left = Cells(153, xTS_Pos).Left + Wg_Offset
.Top = Cells(153, xTS_Pos).Top + 5
End With
ich habe deine Mappe und deine Grafiken nicht und kann deshalb nur mit
Zahlen testen.
Egal welchen Zoomfaktor ich wähle, Top und Left für eine Zelle bleiben
immer gleich.
Müsstest du nicht das Wg_Offset bzw. bei Top die 5 an den Zoomfaktor
anpassen?
Selektiere beide Blätter und stelle dann den Zoomfaktor bei gruppierten
Blättern ein.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-04-10 18:33:22 UTC
Permalink
Hi Claus,

"Claus Busch" schrieb...
Post by Claus Busch
Post by Hans Alborg
With shAu.Shapes(Fzg)
.Left = Cells(153, xTS_Pos).Left + Wg_Offset
.Top = Cells(153, xTS_Pos).Top + 5
End With
Müsstest du nicht das Wg_Offset bzw. bei Top die 5 an den Zoomfaktor
anpassen?
Möglich. Das Wg_Offset ist nur um die Waggons hinter die Lok zu bekommen,
beim Setzen der Lok ist das "0".
Und das Fitzelchen "5" für Top? Muß ich mal probieren. Bei kleinem Zoom ist
die Lok so 20 Zeilen höher.
Post by Claus Busch
Selektiere beide Blätter und stelle dann den Zoomfaktor bei gruppierten
Blättern ein.
Das ist was Neues für mich. Wenn's nicht die wertvollen Teile im Hilfsblatt
zerschießt... Aber es gibt ja das Zwischenspeichern :-)
Das Hilfsblatt ist übrigens ausgeblendet. Hmmm.

Ich melde mich...
Hans
Claus Busch
2015-04-10 19:25:21 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Möglich. Das Wg_Offset ist nur um die Waggons hinter die Lok zu bekommen,
beim Setzen der Lok ist das "0".
Und das Fitzelchen "5" für Top? Muß ich mal probieren. Bei kleinem Zoom ist
die Lok so 20 Zeilen höher.
ich habe nun eine Grafik eingefügt und so ausgerichtet, dass ich Rahmen
darum ziehen konnte.
Dann habe ich von einem Hilfsblatt eine Grafik kopiert und eingefügt bei
allen Zoomstufen und die Grafik per Code ausgerichtet und sie war immer
im Rahmen. D.h. ich konnte keinen Versatz bei den Zoomstufen
feststellen. Getestet in xl2007.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-04-10 20:36:56 UTC
Permalink
Hi Claus,

"Claus Busch" schrieb...
Post by Claus Busch
ich habe nun eine Grafik eingefügt und so ausgerichtet, dass ich Rahmen
darum ziehen konnte.
Meinst Du Zellrahmen oder ein Rahmenobjekt?
Im "Empfängerblatt" nehme ich an.

Eigentlich wird die Grafik erst ins Blatt kopiert und dann an die Stelle XY
gebracht. Das heißt Excel zoomt erst die Grafik zum Blatt passend und dann
kommt der Code zum verschieben.

Es könnte sein daß hier ein Zeitfaktor im Spiel ist weil das zoomen der
Grafik noch im Gange ist, oder es wird ein Wert z.B. vom Anfang/oben der
nicht gezoomten Grafik benutzt dem dann die gezoomte Grafik folgen muß...
Post by Claus Busch
Dann habe ich von einem Hilfsblatt eine Grafik kopiert und eingefügt bei
allen Zoomstufen und die Grafik per Code ausgerichtet und sie war immer im
Rahmen.
Tja. Vielleicht sollte ich mal eine sehr viel kleinere Mappe zum testen
nehmen...

Also wenn ich den Zoom beider Blätter vorher abgleiche, landet die Lok auf
dem Punkt.
Ich werde also den Zoom des Hauptblatts auslesen und das Hilfsblatt
entsprechend einstellen. Vor dem Fahrzeuge-Kopieren. Dazu muß es wohl
eingeblendet und selektiert werden, da der Zoom- Befehl sich auf das
ActiveWindow bezieht.

Aber: bei 25% Zoom des Hilfsblatts kommt zwar die Lok im 25%- Hauptblatt gut
an, aber nach dem Codeablauf bis dahin (?) schmiert mir Excel böse ab!
Ich kann noch Userformen aufrufen und schließen, aber wohl keinen Modulcode
mehr starten. Excel läßt sich nicht beenden und bei scheinbarer Ruhe, wenn
ich den Cursor auf eine Zelle mit einer Zahl setze (die ich auch eingeben
kann) zittert die im Bearbeitungsfenster. Die CPU-Last geht auf ca. 90%

Na ich teste mal das mit dem Zoomauslesen...morgen.

Hans
Claus Busch
2015-04-10 20:44:38 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Eigentlich wird die Grafik erst ins Blatt kopiert und dann an die Stelle XY
gebracht. Das heißt Excel zoomt erst die Grafik zum Blatt passend und dann
kommt der Code zum verschieben.
genauso habe ich es gemacht. Die Rahmenlinien habe ich nur eingefügt,
dass ich die Position auch bei 10% noch korrekt sehe. Die hatten mit dem
Code nichts zu tun. Das Blatt auf dem die Grafik erstellt war, stand
immer auf 100%. Das Blatt, in das eingefügt wurde habe ich in 10er
Schritten die Zoomfaktoren vor dem Einfügen geändert.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-04-11 09:27:40 UTC
Permalink
Hallo Claus,
Post by Claus Busch
genauso habe ich es gemacht. Die Rahmenlinien habe ich nur eingefügt,
dass ich die Position auch bei 10% noch korrekt sehe.

Ich bin bis 20% gegangen. Noch kleiner sieht man die Einzelheiten nicht
mehr.

Naja dann lag's bei mir sicher an der Größe der Mappe bzw. dem Code.
Inzwischen klappt das mit dem Zoom anpassen im Hilfsblatt:

Application.ScreenUpdating = False
shAu.Activate
zoomshAu = ActiveWindow.Zoom
With shHb1
.Visible = True
.Activate
ActiveWindow.Zoom = zoomshAu
.Visible = False
End With
shAu.Activate

dann wird erst eines der Fahrzeuge kopiert.

Aber weil ich versuchsweise einen Objektzähler eingebaut hatte fiel mir was
anderes auf:

Eigentlich wollte ich nur die Fahrzeuge und einen Rahmen im Blatt haben.
Plötzlich (naja) waren das so 500 Stück!
Kein Fehler! Das sind alles Kommentare!
Hm. Das bremst wohl auch die Performance. Vielleicht mach' ich da eine
Textbox mit dem jeweiligen Kommentartext die beim draufklicken aufpoppt...

Nee, was mich interessiert: beim Löschen des Blatts "vernichte" ich alle
belegten Spalten und alle Objekte.
Die Objekt-Zählnummer beim neu erstellen des Blatts geht aber bei der
letzten Alten weiter.
So hab ich irgendwann "Comment 99999999".
Kann ich diesen Zähler auf Null setzen?

Hans
Claus Busch
2015-04-11 09:52:47 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Eigentlich wollte ich nur die Fahrzeuge und einen Rahmen im Blatt haben.
Plötzlich (naja) waren das so 500 Stück!
Kein Fehler! Das sind alles Kommentare!
Hm. Das bremst wohl auch die Performance. Vielleicht mach' ich da eine
Textbox mit dem jeweiligen Kommentartext die beim draufklicken aufpoppt...
solche Dinge passieren beim Kopieren. Wenn du eine Zelle mit Kommentar
kopierst und woanders wieder einfügst, wird auch der Kommentar
dupliziert und das kann sich sehr schnell hochschrauben. Du solltest
beim Kopieren die PasteSpecial-Methode anwenden und nur die Werte und
eventuell benötigte Formate einfügen. Auch ein Shape-Objekt, das in dem
Hilfsblatt z.B. den Namen "Rechteck 1" hat, wird beim Kopieren und
Einfügen auf einem anderen Blatt zu "Rechteck 2"
Post by Hans Alborg
Nee, was mich interessiert: beim Löschen des Blatts "vernichte" ich alle
belegten Spalten und alle Objekte.
Die Objekt-Zählnummer beim neu erstellen des Blatts geht aber bei der
letzten Alten weiter.
So hab ich irgendwann "Comment 99999999".
Kann ich diesen Zähler auf Null setzen?
Ist der Code noch nicht ganz durchgelaufen und die initialisierten
Variablen haben noch die alten Werte und zählen dann weiter?
Teste mal mit
MsgBox ActiveSheet.Comments.Count
wie viele Kommentare wirklich im Blatt sind.
Wenn alle Objekte weg sind, sollte eigentlich wieder bei 0 mit dem
Zählen angefangen werden.
Hast du diesen Bug mit den ActiveX-komponenten durch das Update im
Dezember beseitigt? Welcher Zähler wird dir angezeigt, wenn du in einer
ganz neuen Mappe einen Command-Button einfügst? Command-Button1 oder
Command-Button21?


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

"Claus Busch" schrieb...
Post by Claus Busch
Post by Hans Alborg
Kein Fehler! Das sind alles Kommentare!
solche Dinge passieren beim Kopieren. Wenn du eine Zelle mit Kommentar
kopierst und woanders wieder einfügst, wird auch der Kommentar dupliziert
Das ist auch gewollt! Ich hatte nur nicht realisiert, daß Kommentare Objekte
sind und den Code verlangsamen. Das Löschen der Simulation kann bei einer
umfangreichen Tabelle (40 Spalten a 18 Columns) schon dauern.
Bei kleiner Tabelle (5 Spalten) sinds nur 120 Kommentare, geht schneller.
Post by Claus Busch
Du solltest beim Kopieren die PasteSpecial-Methode anwenden...
Wie geschrieben, will ich die Kommentare ja haben, alle.
Aus Performance- Gründen könnte ich die Inhalte aber einzeln (in 8
Tabellenblättern) suchen und per Form anzeigen lassen. So könnte ich auf
Kommentare verzichten.
Finde ich aber nicht so schick mit draufklicken.
Post by Claus Busch
Post by Hans Alborg
Die Objekt-Zählnummer beim neu erstellen des Blatts geht aber bei der
letzten Alten weiter.
Kann ich diesen Zähler auf Null setzen?
Ist der Code noch nicht ganz durchgelaufen und die initialisierten
Variablen haben noch die alten Werte und zählen dann weiter?
Ja schon. Die Objekte prüfe ich ja zwischen Einkopieren und Umbenennen/
setzen der Lok. Das ist mitten im Code.
Allerdings habe ich Deine MsgBox vor und hinter die Löschroutine gesetzt,
also:

MsgBox ActiveSheet.Comments.Count
With shAu
.Range("Z1").Select
.Cells.SpecialCells(xlCellTypeComments).ClearComments
.Columns("C:BAL").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
.Range("A:B").Clear
.Columns("B:B").NumberFormat = "@"
End With
MsgBox ActiveSheet.Comments.Count

Da ist die Simu durchgelaufen, die Löschroutine rufe ich per Button in der
Schnellstartleiste separat auf.

Erst zeigt's die Zahl der Kommentare, dann "0".

Nach Start einer neuen Simu- Session werden die Zählnummern, wie ich
schrieb, fortgesetzt.
Ich muß Excel ganz beenden und neu starten, um wieder mit "Comment 1"
anzufangen.

Dachte dafür gäb's eine VBA- Lösung.
Post by Claus Busch
Wenn alle Objekte weg sind, sollte eigentlich wieder bei 0 mit dem Zählen
angefangen werden.
Wer hat mir nur diese Beta- Version untergeschoben :-(
Post by Claus Busch
Hast du diesen Bug mit den ActiveX-komponenten durch das Update im
Dezember beseitigt?
Arrgh, das war in die offene Wunde!
Woher soll ich das wissen?
Ich: meine Mappen (meist erfolgreich) repariert,
Die: einen neuen Patch geschickt
Ich: meine Mappen (wieder) repariert,
Die: usw.

Endlich hab ich diese Buttons durch Klickzellen ersetzt und lass MS fummeln.
Post by Claus Busch
Welcher Zähler wird dir angezeigt, wenn du in einer ganz neuen Mappe einen
Command-Button einfügst? Command-Button1 oder Command-Button21?
Cb1 ist das. Aber: ich habe auch einen Rechner mit fiesem/seltenem
Internetzugang, der kriegt nicht jedes Update mit und muß auch Excel
beherrschen. Daher behalte ich _mein_ Downgrade.

Ehm, in der Simu- Mappe hab ich sowieso keine ActiveX- Sachen. Naja, in
Userformen wohl schon. Aber die laufen.

Hans
Claus Busch
2015-04-11 16:22:30 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Wie geschrieben, will ich die Kommentare ja haben, alle.
Aus Performance- Gründen könnte ich die Inhalte aber einzeln (in 8
Tabellenblättern) suchen und per Form anzeigen lassen. So könnte ich auf
Kommentare verzichten.
Finde ich aber nicht so schick mit draufklicken.
und wenn du immer nur den benötigten Kommentar während der Simu
erstellst und auch wieder löschst?

Du kannst auch hier mal schauen:
https://support2.microsoft.com/fixit/de
ob du da etwas findest zur Leistungsverbesserung.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-04-12 18:01:39 UTC
Permalink
Hallo,

"Claus Busch" schrieb...
Post by Hans Alborg
Wie geschrieben, will ich die Kommentare ja haben, alle.
und wenn du immer nur den benötigten Kommentar während der Simu erstellst
und auch wieder löschst?
Das simuliert eine Schaltung für Zugfahrten mit einer Masse Relais. Die
haben meist 3 Buchstaben als Name. Das ist aber eine Abkürzung für einen
"richtigen" und manchmal hilfreichen Namen (Bsp.: "FTZ" = "Fahrstraße
Tastenrelais Ziel"), der aber zu lang ist um ihn direkt ins Relaissymbol zu
schreiben.
Daher wenn der Cursor über diesen 3 Buchstaben, d.h. über dem Relaissymbol
steht, bekomme ich den Echtnamen als Kommentar.
Bei 120...500 Relais sind das eben genausoviel Kommentare, einer nützt
garnichts.

Und ich müßte ja ein nutzbares Mouseover haben dafür. Sowas hab ich zwar
schon gemacht (dank Michael Schwimmer), aber auf einer recht statischen
Seite die im Wesentlichen den Screen nicht überschreitet. Viel Aufwand und
langsam. Problematisch auch bei verbundenen Zellen.

Da ist das Anklicken des Relais wohl die einzige Alternative. Ich warte aber
noch ab wie das mit der Performance weitergeht.

Hans

Lesen Sie weiter auf narkive:
Loading...