Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Shapes mit bestimmter Name ansprechen
zurück: Checkboxen werden nicht richtig gedruckt weiter: Makro: Zelle als Mußfeld Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
MattvonHohenberg
Gast


Verfasst am:
11. Feb 2014, 11:39
Rufname:

Shapes mit bestimmter Name ansprechen - Shapes mit bestimmter Name ansprechen

Nach oben
       Version: Office 2007

Hallo zusammen,

mein Problem sieht so aus:

1. Ich habe ein Sheet mit mehren Shapes. Für jeden Shape, dessen Name mit "Scale_' begint (Z.B. "Scale_OP100", de facto: "Scale_*", ), wollte ich seines ID herauskriegen.
Es muss später kein msg Box auftauchen.

2. Zweite Frage
Ich brauche die IDs um auf die herausfundeten Shapes einen Weiteren Vorang durchzusetzen mit einer loop. Am besten (denke ich), wäre es, dass die gefundenen IDs in einem Vektor gespeichert werden.

Generisches Beispiel:

(Look for IDs):In the Sheet wurden 15 Shapes mit jewals der Name "Scale_*" gefunden. Die IDs lauten: 3-18
(Loop): Dann für Shapes mit ID von 3-18 do folgendes.

Bei Unklarheiten stehe ich zur Verfügung.
Ich würde Euch sehr dankbar für die Hilfe sein.

(Excel 2007)
MattvonHohenberg
Gast


Verfasst am:
11. Feb 2014, 16:43
Rufname:


AW: Shapes mit bestimmter Name ansprechen - AW: Shapes mit bestimmter Name ansprechen

Nach oben
       Version: Office 2007

Guys,

I developed sth like this:

Code:

Sub GetShapePropertiesSomeWs()
    Dim sShapes As Shape, lLoop As Long
    Dim wsLoop As Worksheet
    Worksheets("Summary").Range("A1:C1") = _
     Array("Shape Name", "ID", "Sheet Name")
         'Loop through all Worksheet
        For Each wsLoop In Worksheets
        Select Case UCase(wsLoop.Name)
           Case "PLCP"
     For each sShapes in wsLoop.Shapes
   if sShapes.Name like "Scale_*" then
            For Each sShapes In wsLoop.Shapes
                lLoop = lLoop + 1
                With sShapes
                    'Add shape properties
                    Worksheets("Summary").Cells(lLoop + 1, 1) = .Name
                    'Follow the same pattern for more
                    Worksheets("Summary").Cells(lLoop + 1, 3) = wsLoop.Name
                    Worksheets("Summary").Cells(lLoop + 1, 2) = sShapes.ID
                End With
                Next sShapes
    Next sShapes
                End Select
    Next wsLoop         'AutoFit Columns.    WsNew.Columns.AutoFitEnd Sub

    Worksheets("Summary").Columns.AutoFit

End Sub



However, it still doesnt work.

Could please some have lookt at it?
Thank you in advance
HKindler
ambitionierter Amateur


Verfasst am:
11. Feb 2014, 18:51
Rufname:

AW: Shapes mit bestimmter Name ansprechen - AW: Shapes mit bestimmter Name ansprechen

Nach oben
       Version: Office 2007

Du hast da eine for-each-Schleife zu viel drin und die über die Worksheets ist überflüssig. Außerdem fehlt ein "End If". Versuch mal folgendes (ungetestet):

Code:
Sub GetShapePropertiesSomeWs()
Dim sShapes As Shape, lLoop As Long
Worksheets("Summary").Range("A1:C1") = _
  Array("Shape Name", "ID", "Sheet Name")
For each sShapes in Worksheets("PLCP")
    if sShapes.Name like "Scale_*" then
        lLoop = lLoop + 1
        With sShapes
            'Add shape properties
            Worksheets("Summary").Cells(lLoop + 1, 1) = .Name
            'Follow the same pattern for more
            Worksheets("Summary").Cells(lLoop + 1, 3) = Parent.Name
            Worksheets("Summary").Cells(lLoop + 1, 2) = sShapes.ID
        End With
    End If
Next sShapes

Worksheets("Summary").Columns.AutoFit

End Sub

_________________
Gruß,
Helmut

----------------------------
Windows 7 / Office 2010
Mattvon
Gast


Verfasst am:
19. Feb 2014, 19:58
Rufname:

AW: Shapes mit bestimmter Name ansprechen - AW: Shapes mit bestimmter Name ansprechen

Nach oben
       Version: Office 2007

Danke Helmut!
Es funktioniert!


Könnest du mir noch dabei helfen?
Code:

Sub GetShapePropertiesSomeWs4()
    Dim sShapes As Shape
    Dim wsLoop As Worksheet
    Dim l As Long
         'Loop through all Worksheet
        For Each wsLoop In Worksheets
        Select Case UCase(wsLoop.Name)
           Case "PLCP"
           For Each sShapes In wsLoop.Shapes
            If sShapes.Name Like "Scale_*" Then
            l = Worksheets("PLCP").Range("F1:F1000").Find(sShape.Name, Range("F1"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Row
            Worksheets("PLCP").Shapes(sShapes.Name).Chart.SetSourceData Source:=Union(Range(Cells(l + 1, 5), Cells(l + 31, 6)), Range(Cells(l + 1, 8), Cells(l + 31, 37)))
                End If
                Next sShapes
                End Select
    Next wsLoop
End Sub

Leider Function Find kann irgendwie mit sShape.Name zurechtkommen.

Wenn ich ein konkretes Beispiel von dem Shapes nehme und schreibe statt Find(sShape.Name... ) Find("Scale_Risk"...) die Funktion wird es finden.

Ich würde Dir sehr dankbar für die Hilfe.
HKindler
ambitionierter Amateur


Verfasst am:
20. Feb 2014, 13:35
Rufname:


AW: Shapes mit bestimmter Name ansprechen - AW: Shapes mit bestimmter Name ansprechen

Nach oben
       Version: Office 2007

Hi Matt,

leider kann ich dir hier nicht wirklich weiter helfen, sondern nur ein paar Denkanstöße geben.

Ich selbst verwende .Find sehr selten und versuche es immer zu umgehen. Da mir bei .Find schon einige seltsame Dinge passiert sind. So findet .Find z.B. nichts in ausgeblendeten Zellen. Man muss auch aufpassen, ob nicht irgendwelche Optionen vom User verstellt wurden. Es wird in einer Schleife immer wieder von vorne angefangen (man muss also selbst den Schleifenabbrauch bestimmen). Dies sind wahrscheinlich noch nicht alle Tücken, die .Find so bietet.
Mittlerweile verwende ich deshalb einfach eine Suchschleife. Aber Achtung! Erst alle Zellen in ein Datenfeld lesen, sonst wird das seeeehr langsam.

Wieso .Find nicht mit sShape.Name klar kommen soll, ist mir nicht klar. Bist du dir sicher, dass sShape.Name auch wirklich "Scale_Risk" zurück gibt?

Und noch eine Anmerkung: Wieso machst du auch in dieser Routine eine Schleife über alle Tabellenblätter? Du weist doch, dass du auf das Blatt "PLCP" zugreifen willst. Dann mach das doch direkt! Oder wenn schon über eine Schleife, dann verwende doch auch deine Schleifenvariable wsLoop anstatt Worksheets("PLCP"). Das macht es dann wesentlich leichter den Code zu pflegen.

_________________
Gruß,
Helmut

----------------------------
Windows 7 / Office 2010
Matt von
Gast


Verfasst am:
25. Feb 2014, 09:04
Rufname:

AW: Shapes mit bestimmter Name ansprechen - AW: Shapes mit bestimmter Name ansprechen

Nach oben
       Version: Office 2007

Danke Helmut für deine Antwort!

Bei der Zeile

l = Worksheets("PLCP").Range("F1:F1000").Find(sShapes.Name, Range("F11"), xlNext).Row

bekomme ich die Error Meldung.

Wenn ich mit der Maus aus sShapes.Name zeige, dann ´wird das erste gefundete sShape abgebildet..."Scale_OP.100_Risk".

Solche Namen von den Shapes befinden sich in meiner Sheet in der Spalte F.

Die Fehler Meldung lautet "Subscript out of range".



Any ideas?


Code:
Option Explicit
Sub GetShapePropertiesSomeWs463()
    Dim sShapes As Shape
    Dim wsLoop As Worksheet
    Dim l As Long
         'Loop through all Worksheet
        For Each wsLoop In Worksheets
        Select Case UCase(wsLoop.Name)
           Case "PLCP"
           For Each sShapes In wsLoop.Shapes
            If sShapes.Name Like "Scale_*" Then
            l = Worksheets("PLCP").Range("F1:F1000").Find(sShapes.Name, Range("F11"), xlNext).Row
            Worksheets("PLCP").Shapes(sShapes.Name).Chart.SetSourceData Source:=Union(Range(Cells(l + 2, 5), Cells(l + 32, 6)), Range(Cells(l + 2, 8), Cells(l + 32, 37)))
                End If
                Next sShapes
                End Select
    Next wsLoop
End Sub
MattVan
Gast


Verfasst am:
25. Feb 2014, 10:46
Rufname:

AW: Shapes mit bestimmter Name ansprechen - AW: Shapes mit bestimmter Name ansprechen

Nach oben
       Version: Office 2007

Have it!!!!


Code:
Sub Method9()
    Dim rng1 As Range
    Dim strSearch As String
    Dim sShapes As Shape
    Dim wsLoop As Worksheet
    Dim l As Long
        For Each wsLoop In Worksheets
        Select Case UCase(wsLoop.Name)
        Case "PLCP"
        For Each sShapes In wsLoop.Shapes
            If sShapes.Name Like "Scale_*" Then
            strSearch = sShapes.Name
            Set rng1 = Range("F:F").Find(strSearch, , xlValues, xlWhole)
            If Not rng1 Is Nothing Then
            l = rng1.Row
            Worksheets("PLCP").Shapes(sShapes.Name).Chart.SetSourceData Source:=Union(Range(Cells(l + 2, 5), Cells(l + 31, 6)), Range(Cells(l + 2, 8), Cells(l + 31, 37)))
         End If
          End If
    Next sShapes
    End Select
    Next wsLoop
End Sub
HKindler
ambitionierter Amateur


Verfasst am:
25. Feb 2014, 11:05
Rufname:

AW: Shapes mit bestimmter Name ansprechen - AW: Shapes mit bestimmter Name ansprechen

Nach oben
       Version: Office 2007

Hi Matt,

die Definition von Range.Find():

Range.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

Du übergibst also "xlNext" als "LookIn". "xlNext" ist aber die SearchDirection. Das kann nicht funktionieren! Du musst also einige Kommas einfügen oder "SearchDirection:=" vor xlNext schreiben.

Außerdem würde in deinem Beispiel auch eventuell - ja nachdem, was in der letzten Suche gesucht wurde - "Scale_OP.100" beim Suchbegriff "Scale_OP.100_Risk" gefunden werden. Ich bezweifle, dass das beabsichtigt ist. Es fehlt also noch "LookAt:=xlWhole". Das ist der Grund, weshalb ich von .Find abrate bzw. man bei .Find immer(!) alle Parameter angeben sollte.

_________________
Gruß,
Helmut

----------------------------
Windows 7 / Office 2010
HKindler
ambitionierter Amateur


Verfasst am:
25. Feb 2014, 11:14
Rufname:


AW: Shapes mit bestimmter Name ansprechen - AW: Shapes mit bestimmter Name ansprechen

Nach oben
       Version: Office 2007

Sehe gerade deinen letzten Post.

Du hast da immer noch mindestens eine Stolperfalle drin: Wenn dein Makro aus einem anderen Sheet als "PLCP" aufgerfuen wird, dann wird in Spalte "F:F" im aufrufenden Blatt gesucht. Also besser
Code:
Set rng1 = wsLoop.Range("F:F").Find(strSearch, , xlValues, xlWhole)
schreiben. Aber bei diesem Aufruf ist z.B. die SerachDirection nicht festgelegt und es wird die des letzten Aufrufs verwendet. Der letzte Aufruf von .Find() kann übrigens auch vom User selbst über die Such-Funktion des Menus ausgelöst worden sein! Zitat aus der Hilfe:
Zitat:
Die Angaben für LookIn, LookAt, SearchOrder und MatchByte werden jedesmal gespeichert, wenn Sie diese Methode verwenden. Falls Sie beim nächsten Aufruf dieser Methode keine Werte für die Argumente angeben, werden die gespeicherten Werte verwendet. Die Angabe dieser Argumente ändert die Einstellungen im Dialogfeld Suchen, und eine Änderung der Einstellungen im Dialogfeld Suchen ändert die gespeicherten Werte, die verwendet werden, wenn Sie die Argumente nicht angeben. Um Probleme zu vermeiden, sollten Sie bei jeder Verwendung dieser Methode diese Argumente ausdrücklich angeben.

_________________
Gruß,
Helmut

----------------------------
Windows 7 / Office 2010
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel Formeln: Definierter Name zu kurz? 11 katz 584 25. Sep 2007, 19:39
fridgenep Definierter Name zu kurz?
Keine neuen Beiträge Excel Formeln: ***Selber Wert aber nur ein Name*** 4 Sascha1990 391 04. Sep 2007, 13:27
Gast ***Selber Wert aber nur ein Name***
Keine neuen Beiträge Excel Formeln: Tabellen Name? 3 murmeltier 375 14. Aug 2007, 10:23
c0bRa Tabellen Name?
Keine neuen Beiträge Excel Formeln: Name, Vorname, aus zwei Zellen verbinden mit Komma trennen 7 financialmaf 22271 28. Jun 2007, 11:56
Mario79 Name, Vorname, aus zwei Zellen verbinden mit Komma trennen
Keine neuen Beiträge Excel Formeln: Summe nur bei bestimmter Bezeichnung 2 daHook 600 03. Mai 2007, 08:49
daHook Summe nur bei bestimmter Bezeichnung
Keine neuen Beiträge Excel Formeln: eine Spanne von feldern ansprechen 7 micro 471 19. Apr 2007, 13:59
Klaus-Dieter eine Spanne von feldern ansprechen
Keine neuen Beiträge Excel Formeln: Anzahl bestimmter Tage pro Monat ermitteln 1 wmv57 1494 17. Apr 2007, 09:06
McAdder Anzahl bestimmter Tage pro Monat ermitteln
Keine neuen Beiträge Excel Formeln: SVERWEIS Gleicher Name Suche 10 Nokman 2222 11. Apr 2007, 22:29
Nokman SVERWEIS Gleicher Name Suche
Keine neuen Beiträge Excel Formeln: Ergebnis in bestimmter Zelle ausgeben 4 Cybergod 682 28. Feb 2007, 22:54
Cybergod Ergebnis in bestimmter Zelle ausgeben
Keine neuen Beiträge Excel Formeln: Name des Tabellenblattes in Formel integrieren 3 PeterKL 9196 11. Feb 2007, 15:12
olafB Name des Tabellenblattes in Formel integrieren
Keine neuen Beiträge Excel Formeln: Zusammenrechnen nur bestimmter Kontobewegungen 2 Kay aus Hamburg 491 14. Jan 2007, 23:15
Gast Zusammenrechnen nur bestimmter Kontobewegungen
Keine neuen Beiträge Excel Formeln: unerwünschte Formelansicht in bestimmter Zelle 1 dieMelly 681 29. Dez 2006, 23:25
Alpengeist unerwünschte Formelansicht in bestimmter Zelle
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: MS Frontpage