Ungroup --> Array

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Ungroup --> Array
von: harry
Geschrieben am: 18.04.2005 09:16:17
Hallo Leute,
erstmal einen gutenmorgen und eine gute Woche.
Ich habe folgende Frage/Problem:
Ich will die Namen von einem Ungroup in einem Array
speichern, also sprich ich habe eine Group Element
lasse es nun ungroupieren und von den daraus erhaltenen
Elementen, sollen die NAmen gespeichert werden.
Wie gehe ich da vor?
ActiveSheet.Shapes("Logo1").Select
Selection.Ungroup
' die Namen sollen hier gespeichert werden
ActiveSheet.Shapes("Logo").Select
Selection.Ungroup
'sowie diese Namen sollen hier gespeichert werden

Bild

Betrifft: AW: Ungroup --> Array
von: MichaV
Geschrieben am: 18.04.2005 09:29:02
Hi,
z.B. so:
Dim i As Integer
Dim anz As Integer
Dim arr() As String
anz = ActiveSheet.Shapes("Group 4").GroupItems.Count
ReDim arr(anz)
For i = 1 To anz
arr(i) = ActiveSheet.Shapes("Group 4").GroupItems(i).Name
Next i
ActiveSheet.Shapes("Group 4").Ungroup
For i = 1 To anz
MsgBox arr(i)
Next i
Gruß- Micha
PS: Rückmeldung wäre nett
Bild

Betrifft: AW: Ungroup --> Array
von: harry
Geschrieben am: 18.04.2005 10:33:42
Hi Micha,
erstmal danke für deine Antwort.
Leider erhalte ich eine Run Time Error in der Zeile
anzLogo = ActiveSheet.Shapes("Logo").GroupItems(a).Count
mit
Dim anzLogo As Integer
Dim arrLogo1() As String
Dim arrLogo() As String
Dim a As Integer
Fehlermeldung: The index into the specified collection is out of bounds !
Was nun?
Bild

Betrifft: AW: Ungroup --> Array
von: harry
Geschrieben am: 18.04.2005 10:46:57
Hi Micha,
hatte tipfehler .... sorry :)
Andere frage ... wenn ich nun diese Items wieder zu einer Group
wiederherstellen möchte, durchlaufe ich wieder die schleife?
Oder?
Bild

Betrifft: AW: Ungroup --> Array
von: MichaV
Geschrieben am: 18.04.2005 10:55:28
Hi,
anzLogo = ActiveSheet.Shapes("Logo").GroupItems(a).Count geht nicht. Ich denke, Du willst die Anzahl der vorhandenen Shapes ermitteln.
Mach das mit anzLogo = ActiveSheet.Shapes.Count
Wenn Du rausfinden willst, ob es sich um ein gruppiertes Shape handelt, dann prüfe, ob ActiveSheet.Shapes(x).Type= msoGroup
Gruß- Micha
Bild

Betrifft: AW: Ungroup --> Array
von: harry
Geschrieben am: 18.04.2005 10:58:44
Hi Micha,
ich habe vorhin noch ein Beitrag geschrieben gehabt, aber wohl vegessen es abzuschicken.
Ich hatte ein tippfehler und deswegen war der fehler aufgetreten.
Thx :)
Aber eineandere Frage.
Wenn ich nun den den Inhalt des Arrays wieder zu einer group bilden will, wie gehe ich voran?
Gruß
harry
Bild

Betrifft: AW: Ungroup --> Array
von: MichaV
Geschrieben am: 18.04.2005 11:11:30
Hi,
da hat sich was überschnitten.
Mit ActiveSheet.Shapes.Range(arr).Group gruppierst du wieder. Aber nimm oben das AS STRING hinter DIM arr() wieder raus! Sonst klappts nicht.
Gruß- Micha
Bild

Betrifft: AW: Ungroup --> Array
von: harry
Geschrieben am: 18.04.2005 11:13:22
thx micha,
werde es später ausprobieren, da ich gerade vorher noch was anderes erledigen muss ...
cu later ;)
Bild

Betrifft: AW: Ungroup --> Array
von: harry
Geschrieben am: 18.04.2005 11:54:24
So Micha,
habe nun genau wie du gesagt hast das Array nicht als string deklariert,
da sonst ein Fehler auftritt (Falscher wert oder so).
Leider aber erhalte ich trotzdem einen Kompilierfehler:
Run Time Error '1004'
The index into the specified collection is out of bounds
Was will er mir denn jetzt damit sagen?
Bild

Betrifft: AW: Ungroup --> Array
von: harry
Geschrieben am: 18.04.2005 15:41:26
Nochmal ich,
weiß jemand wieso nach dieser Eingabe
Dim arr()
ActiveSheet.Shapes.Range(arr).Group
ich einen Kompilierfehler erhalte?
Bild

Betrifft: AW: Ungroup --> Array
von: andre
Geschrieben am: 18.04.2005 19:57:18
Hallo Harry,
vielleicht ist in arr nix drin wenn Du es gerade gedimmt hast ... Und dann brauchst Du glaube kein Array, sondern eine Aufzählung in String-Form ("a, b, c").
Wenn Du die Gruppierung wiederherstellen willst dann tue gleich nach dem Namen auslesen regroup ausführen. Zum Auslesen der Namen brauchst Du in 2000 die Gruppe noch nicht zu trennen, erst in XP wirds komplizierter. Wenn Du in den Gruppen Elemente gleichen Namens hast - also in Gruppe1 ein Text1, in Gruppe2 ein Text1 und in den anderen Gruppen auch dann wird es lustig.
Bild

Betrifft: AW: Ungroup --> Array
von: harry
Geschrieben am: 19.04.2005 08:54:21
Habe inzwischen Problem gelöst.
Da Array ja normalerweise von 0 anfängt, war der Inhalt mit index 0 immer leer!
Wieso auch immer. Habe also außerhalb der Prozedur einfache Base 1 gesetzt und schon funktionierte alles wieder.
Bzgl. Regroup geht leider hier nicht, da ich ein Picture lösche, und somit ist die einstige konstelation nicht mehr vorhanden.
Grüße
Harry
Bild

Betrifft: AW: Ungroup --> Array
von: MichaV
Geschrieben am: 19.04.2005 17:50:35
Hi,
jetzt fällts mir wie Schuppen von den Haaren... genau das war das Problem! Nich Dim arr() sondern Redim(1 to x) war wichtig. Ich hab da auch lange gesucht. Aber das hast Du ja gelöst.
Warum nimmst du nicht den Namen des gelöschten Pictures aus dem Array raus? Dann klappt Gruppierung auch. So würde es gehen:


      
For i = 1 To UBound(arr) - 1
  
If arr(i) = NameDesZuLöschendenBildes Then
    
For x = i To UBound(arr) - 1
      arr(x) = arr(x + 1)
    
Next x
  
End If
Next i
ReDim Preserve arr(1 To UBound(arr) - 1)
End Sub 

     Code eingefügt mit Syntaxhighlighter 3.0

Gruß- Micha
Bild

Betrifft: AW: Ungroup --> Array
von: harry
Geschrieben am: 20.04.2005 11:53:25
Du Micha,
kannst du mir erklären was du da genau mit dem code machst?
Außerdem habe ich noch eine Frage.
Ich will gerne in einem Sheet alle Shapes die den Namen
z.B. "DiesenHier" haben durchzählen.
Problem hierbei, es handelt sich nur um einen Teil des Namens, denn
"DiesenHier" wird durchnummeriert, das heißt in meinem Sheet
habe ich folgendes :
Shape 1 = "DiesenHier1"
Shape 2 = " DiesenHier2"
usw.
Wie zähle ich hier denn durch ?
Denn ich brauche unbedingt die Anzahl dieser Shapes !
Bild

Betrifft: AW: Ungroup --> Array
von: MichaV
Geschrieben am: 20.04.2005 12:23:34
Hi,
Für Dein neues Problem wäre denkbar:
such="DiesesHier"
if instr(shapes(x).name,such)>0 then 'Name des Shapes enthält "DiesesHier"
'oder
if left(shapes(x).name,len(such)+1)=such then 'linker Teil des Names entspricht "DiesesHier"
Die notwendigen Schleifen zum Suchen aller Shapes kennst Du ja.
Hier noch ne Erklärung zum vorigen Code:
For i = 1 To UBound(arr) - 1 'Alle Sätze des Array, bis auf das letzte
If arr(i) = NameDesZuLöschendenBildes Then 'Wenn Satz=zu löschender Wert dann
For x = i To UBound(arr) - 1 'die restlichen Daten
arr(x) = arr(x + 1) 'um eins nach unten verschieben
'(dadurch wird der zu löschende Satz automatisch
'überschrieben)
Next x
'hier könnte ein Exit For rein, denn es macht keinen Sinnn, die i- Schleife weiter abzuarbeiten
End If
Next i
ReDim Preserve arr(1 To UBound(arr) - 1) 'Das Datenfeld neu dimensionieren mit einer um 1 kleineren Obergrenze, denn es ist ja ein Datensatz weniger
End Sub

Gruß- Micha
Bild

Betrifft: AW: Ungroup --> Array
von: Harry
Geschrieben am: 20.04.2005 13:21:28
Nach eingabe und debugen erhlate ich aber nun
ein Kompilierfehler
"Sub or Function not defined"
und er zeigt mir das er Schapes meint bei diesen aufruf :
if left(shapes(x).name,len(such)+1)=such then ...
Erklärung wieso ?
Danke nochmals für die Erklärung des codes ;)
Bild

Betrifft: AW: Ungroup --> Array
von: MichaV
Geschrieben am: 20.04.2005 13:31:17
Hi,
kannst doch nicht nur mein Codeschnipsel nehmen. So der vollständige Code:
such="Text"
For x = 1 To ActiveSheet.Shapes.Count
if left(shapes(x).name,len(such)+1)=such then 'Name beginnt mit "Text"
'hier nun Dein Code (was auch immer Du machen willst)
end if
Next i
Gruß! Micha
Bild

Betrifft: AW: Ungroup --> Array
von: harry
Geschrieben am: 20.04.2005 17:27:28
Natürlich ist mir das klar Micha :)
wollte nur andeuten das an dieser Stelle er mir einen Kompilierfehler erzeugt!
Wenn ich wiederum
if left(shapes(x).name,len(such)+1)=such then ... in
if left(shapes.name,len(such)+1)=such then ....
umwandle scheint es zu laufen ....
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zelladresse ausPositionswert bestimmen"