Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
612to616
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
612to616
612to616
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

GrafikObjekte -> Schleife über Teilmenge / Auswahl

GrafikObjekte -> Schleife über Teilmenge / Auswahl
19.05.2005 16:01:11
marko_ti
Hallo liebe Leute,
ich möchte eine Schleife über alle Grafikobjekte laufen lassen, deren Name mit "Str" anfängt - bzw. eine weitere Eigenschaft der "Str"-Objekte ist, dass diese alle vom Typ Connector sind, das wäre auch ein mögliches Kriterium für eine Schleife. Kann ich den Code, den ich bisher dazu verwende (s.u.), irgendwie beschleunigen? Ich möchte nicht unbedingt immer erst jedes einzelne Objekt "angucken" müssen (per Code) und auf "Str" testen.
For Each Thisshape In Worksheets(1).Shapes
thistext = Thisshape.Name
If Left(thistext, 3) = "Str" Then
...
end if
next
Ein weiterer Fall ist eine Schleife über alle ggf. selektierten Grafiken (ohne Selektion soll Schleife über ALLE gehen), wenn ich dort
For Each Thisshape In Selection.ShapeRange
benutze, bekomme ich bei fehlender Selektion eine Fehlermeldung. Daher nutze ich
On Error Resume Next
iShapeCt = Selection.ShapeRange.count
If Err Then 'Nix selektiert
For Each Thisshape In ActiveSheet.Shapes
...
Next
else 'selektiert
For Each Thisshape In Selection.ShapeRange
...
Next
end if
was ich auch ziemlich unschön finde. Gibt es hier vielleicht auch etwas eleganteres?
Danke für Tipps und viele Grüße aus Kölle
Marko

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: GrafikObjekte -> Schleife über Teilmenge / Auswahl
19.05.2005 16:09:20
Horst
Hi,
wäre schon wissenswert, was du mit den Shapes machen willst, die Methoden
sind bei den verschiedenen Typen auch unterschiedlich.
mfg Horst
AW: GrafikObjekte -> Schleife über Teilmenge / Auswahl
19.05.2005 16:23:11
marko_ti
Hallo Horst,
was in den Schleifen passiert ist ziemlich umfangreich, da laufen Routinen zur Überprüfung der Namen, die Connections werden ggf. überprüft und umgebaut - die Methoden usw. benutze ich dann entsprechend des Zustands jedes einzelnen Stromes (das sind die Grafiken mit "Str" am Anfang, sie verbinden "Units" und das ganze wird ein Fließbild). U.a. wird auch die Farbe gesetzt usw. - vielleicht nehmen wir das als einfaches Beispiel: setze von den Strömen in der Schleife die Farbe auf blau.
'StrName ist der Name eines gefundenen Stroms
StrName = Thisshape.name
Set Strom = ActiveSheet.Shapes(StrName)
Strom.Line.ForeColor.SchemeColor = 12
viele Grüße
Marko
Anzeige
AW: GrafikObjekte -> Schleife über Teilmenge / Auswahl
19.05.2005 16:24:57
marko_ti
(PS.: Frage ist noch offen, hatte Häkchen vergessen...)
AW: GrafikObjekte -> Schleife über Teilmenge / Auswahl
19.05.2005 20:10:40
Nepumuk
Hallo Marko,
1. Die direkte Abfrage von Wahr oder Falsch ist auf alle Fälle schneller, wie wenn dies durch einen Vergleich erfolgt. Frage also erst die Connector - Eigenschaft ab und dann erst den Namen.
So zum Beispiel:


For Each Thisshape In Worksheets(1).Shapes
    With Thisshape
        If .Connector Then
            If Left$(Thisshape.Name, 3) = "Str" Then
            
            End If
        End If
    End With
Next


2. Dein Umweg über eine Variable ist nicht nötig.
3. Wenn du mit Strings, und die Name -Eigenschaft liefert einen String zurück, arbeitest, solltest du an Stelle der Variant- die String - Version der String - Funktionen benutzen. Die sind wesentlich schneller. Also an Stelle von Left - Left$ / UCase - UCase$ / Dir - Dir$ /Chr - Chr$ usw. Damit weiß Excel nämlich, das es nicht in die interne Konvertierungsroutine muss, um aus einem Variant eine Zeichenkette zu machen. Wenn du trotzdem einen Variant übergibst, gibt es keinen Fehler, aber der Geschindigkeitsgewinn ist dahin.
4. Du kannst doch den Typ der Selection abfragen. Zwei Versionen:
If TypeName(Selection) = "DrawingObjects" Then
If TypeOf Selection Is DrawingObjects Then
Du kannst ja mal testen, welche schneller ist.
Gruß
Nepumuk
Anzeige
AW: GrafikObjekte -> Schleife über Teilmenge / Auswahl
20.05.2005 13:09:10
marko_ti
Hallo Nepumuk,
werde mir Deine zahlreichen Ratschläge zu Herzen nehmen und mal den Geschwindigkeitszuwachs messen - vielen Dank dafür!!! Die Umsetzung wird allerdings noch etwas auf sich warten lassen...
viele Grüße
Marko

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige