none
Publisher 2003: Suchen eines benannten Shapes in einer Gruppe

    Frage

  • Guten Tag!

    Auf einer Publisher-Seite gibt es mehrere benannte Shape'.

    'VBA-Code:
    
            With shpShape
                .Name = m_Name & "_" & j   'Gruppenelement benennen
            End With

    Die Shape's werden in einer Schleife benannt und anschließend gruppiert.

    Mit nachstehendem Code kann ich auf das Shape nur zugreifen, wenn das Shape keiner Gruppe angehört.

    'VBA-Code:
    
    Sub testName()
        Dim myPage As Page
    
        Set myPage = ActiveDocument.Pages.FindByPageID(50332022)
        myPage.Shapes.Item("myName").Select
    End Sub

    Gehört das Shape jedoch zu einer Gruppe, wird das benannte Shape nicht gefunden.

    Wie kann ich per VBA auf ein benanntes Gruppenmitglied zugreifen?  Die Gruppe soll dabei erhalten bleiben oder nach dem ändernden Zugriff auf ein Element der Gruppe mit allen ihren Elementen und Einstellungen neu erzeugt werden! Weiß jemand Rat?

    Little Hobbit


    Mittwoch, 21. März 2012 17:50

Antworten

  • Das Problem ist gelöst.

    Voraussetzung:

    - Der Name des gsuchten Shapes ist bekannt.

    - Das Shape ist selbständig oder einfaches Mitglied einer Gruppe (mehrfach gruppierte Shapes werden nicht gefunden).

    'VBA-Code:
    '----------------------------------------------------------------------------------------------------------
    'Funktion SucheShape
    'Autor:             Little Hobbit
    'Datum:             09.05.2012
    'Copyright          (c) 2012 Little Hobbit
    '
    'Mit der Funktion wird ein Shape, dessen Name bekannt ist, in einem Publisher Dokument gesucht.
    'Das Shape kann einfaches Mitglied einer Gruppe sein. Mehrfachgruppierte Shapes werden nicht
    'gefunden. Die Gruppe wird nicht verändert.
    '
    'Variable:      Name des Shape
    '
    'Rückgabewert:  Das gefundene Shape zur weiteren Verwendung
    '----------------------------------------------------------------------------------------------------------
    
    
    Private Function SucheShape(NameShape As String) As Shape
        
        On Error GoTo Err_Function
        
        Dim myPage              As Page
        Dim shpShape            As Shape
        Dim shpTemp             As Shape
        Dim intAnzahlItems      As Integer
        Dim i                   As Integer
        Dim bolErr              As Boolean
        
        'alle Seiten des Dokuments durchsuchen
        For Each myPage In ActiveDocument.Pages
            bolErr = False
            'Prüfen ob das Gesuchte Shape auf der Seite vorhanden ist
            Set shpShape = myPage.Shapes(NameShape)
            
            If bolErr = False Then
                Set SucheShape = shpShape       'gefunden
                GoTo Exit_Function
            End If
            
        Next myPage
        
        'alle Seiten des Dokuments durchsuchen
        For Each myPage In ActiveDocument.Pages
            
            'alle Shapes der Seite untersuchen
            For Each shpShape In myPage.Shapes
            
                'Wenn Shape eine Gruppe ist, alle Gruppenmitglieder überprüfen
                If shpShape.Type = pbGroup Then
                    intAnzahlItems = shpShape.GroupItems.Count
                    
                    For i = 1 To intAnzahlItems
                        Set shpTemp = shpShape.GroupItems.Item(i)
                        
                        If shpTemp.Name = NameShape Then
                            Set SucheShape = shpTemp            'gefunden
                            GoTo Exit_Function
                        End If
                        
                    Next i
                    
                End If
            
            Next shpShape
        
        Next myPage
        
        
    Exit_Function:
        Exit Function
            
    Err_Function:
        bolErr = True
        Resume Next
    
    End Function




    Mittwoch, 9. Mai 2012 15:10

Alle Antworten

  • Das Problem ist gelöst.

    Voraussetzung:

    - Der Name des gsuchten Shapes ist bekannt.

    - Das Shape ist selbständig oder einfaches Mitglied einer Gruppe (mehrfach gruppierte Shapes werden nicht gefunden).

    'VBA-Code:
    '----------------------------------------------------------------------------------------------------------
    'Funktion SucheShape
    'Autor:             Little Hobbit
    'Datum:             09.05.2012
    'Copyright          (c) 2012 Little Hobbit
    '
    'Mit der Funktion wird ein Shape, dessen Name bekannt ist, in einem Publisher Dokument gesucht.
    'Das Shape kann einfaches Mitglied einer Gruppe sein. Mehrfachgruppierte Shapes werden nicht
    'gefunden. Die Gruppe wird nicht verändert.
    '
    'Variable:      Name des Shape
    '
    'Rückgabewert:  Das gefundene Shape zur weiteren Verwendung
    '----------------------------------------------------------------------------------------------------------
    
    
    Private Function SucheShape(NameShape As String) As Shape
        
        On Error GoTo Err_Function
        
        Dim myPage              As Page
        Dim shpShape            As Shape
        Dim shpTemp             As Shape
        Dim intAnzahlItems      As Integer
        Dim i                   As Integer
        Dim bolErr              As Boolean
        
        'alle Seiten des Dokuments durchsuchen
        For Each myPage In ActiveDocument.Pages
            bolErr = False
            'Prüfen ob das Gesuchte Shape auf der Seite vorhanden ist
            Set shpShape = myPage.Shapes(NameShape)
            
            If bolErr = False Then
                Set SucheShape = shpShape       'gefunden
                GoTo Exit_Function
            End If
            
        Next myPage
        
        'alle Seiten des Dokuments durchsuchen
        For Each myPage In ActiveDocument.Pages
            
            'alle Shapes der Seite untersuchen
            For Each shpShape In myPage.Shapes
            
                'Wenn Shape eine Gruppe ist, alle Gruppenmitglieder überprüfen
                If shpShape.Type = pbGroup Then
                    intAnzahlItems = shpShape.GroupItems.Count
                    
                    For i = 1 To intAnzahlItems
                        Set shpTemp = shpShape.GroupItems.Item(i)
                        
                        If shpTemp.Name = NameShape Then
                            Set SucheShape = shpTemp            'gefunden
                            GoTo Exit_Function
                        End If
                        
                    Next i
                    
                End If
            
            Next shpShape
        
        Next myPage
        
        
    Exit_Function:
        Exit Function
            
    Err_Function:
        bolErr = True
        Resume Next
    
    End Function




    Mittwoch, 9. Mai 2012 15:10
  • Lösung für verschachtelt gruppierte Shapes:

    'VBA-Code:
    
    
    '----------------------------------------------------------------------------------------------------------
    'Funktion SucheShape
    'Autor:             Little Hobbit
    'Datum:             10.05.2012
    'Copyright          (c) 2012 Little Hobbit
    '
    'Mit der Funktion wird ein Shape, dessen Name bekannt ist, in einem Publisher Dokument gesucht.
    'Das Shape kann Mitglied einer verschachtelt gruppierten Gruppe sein.
    'Die Gruppe wird nicht verändert.
    '
    'Variable:      Name des Shape
    '
    'Rückgabewert:  Das gefundene Shape zur weiteren Verwendung
    'Hilfsfunktion: ShapeInGroup zur Suche des Shape in verschachtelten Gruppen
    '----------------------------------------------------------------------------------------------------------
    
    
    Private Function SucheShape(NameShape As String) As Shape
        
        Dim myPage              As Page
        Dim shpShape            As Shape
        Dim shpTemp             As Shape
        
        For Each myPage In ActiveDocument.Pages
            
            For Each shpShape In myPage.Shapes
                If shpShape.Name = NameShape Then
                   Set SucheShape = shpShape
                   GoTo Exit_Function
                ElseIf shpShape.Type = pbGroup Then
                    Set shpTemp = ShapeInGroup(shpShape, NameShape)
                    
                    If Not shpTemp Is Nothing Then
                        Set SucheShape = shpTemp
                        GoTo Exit_Function
                    End If
                        
                End If
                
            Next shpShape
        
        Next myPage
                        
    Exit_Function:
            
        Exit Function
    
    End Function
    
    Function ShapeInGroup(shpShape As Shape, NameShape As String) As Shape
    
        Dim shpTest             As Shape
        Dim shpTemp             As Shape
        Dim intAnzahlItems      As Integer
        Dim i                   As Integer
        
        intAnzahlItems = shpShape.GroupItems.Count
        
        For i = 1 To intAnzahlItems
            Set shpTest = shpShape.GroupItems.Item(i)
                        
            If shpTest.Name = NameShape Then
                Set ShapeInGroup = shpTest
                GoTo Exit_Function
            ElseIf shpTest.Type = pbGroup Then
                If Not ShapeInGroup(shpTest, NameShape) Is Nothing Then GoTo Exit_Function
            End If
                        
        Next i
            
    Exit_Function:
        Exit Function
    End Function
    

    Donnerstag, 10. Mai 2012 09:06