Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel vba Properties von Shapes & Commandbutton
#1
Photo 
Hallo zusammen,

könntet Ihr mir wieder mal bei einer Aufgabe helfen?

Ich möchte aus allen Tabellenblättern von jeweils allen platzierten Shapes und Commandbuttons  sämtliche Properties auslesen und in ein neu eingefügtes Tabellenblatt schreiben.
Also etwa in der Form:


ShapePropertiesAll
ABCDEFGHI
1Shape NameShape TypeHeightWidthLeftTopMarginLeftMarginRightSheet Name
2Rechtwinkliges Dreieck 1Rechtwinkliges Dreieck 1505025102,834645748138432,83464574813843Contents
3Rounded Rectangle 1_ContentButtonRounded Rectangle 1_ContentButton206020047,199999809265147,19999980926514Test
4Rounded Rectangle 1_ContentButtonRounded Rectangle 1_ContentButton206020047,199999809265147,19999980926514Rechnung
5Rounded Rectangle 1_ContentButtonRounded Rectangle 1_ContentButton206020047,199999809265147,19999980926514Erich
6Rounded Rectangle 1_ContentButtonRounded Rectangle 1_ContentButton206020047,199999809265147,19999980926514Global
7Rounded Rectangle 1_ContentButtonRounded Rectangle 1_ContentButton206020047,199999809265147,19999980926514Tabelle5
8Rounded Rectangle 1_ContentButtonRounded Rectangle 1_ContentButton206020047,199999809265147,19999980926514Hans
9Rounded Rectangle 1_ContentButtonRounded Rectangle 1_ContentButton206020047,199999809265147,19999980926514Tabelle9
10CommandButton1CommandButton138,25169,56038,25

Füllfarben und Muster
Zelle Rot Grün Blau Color Muster Farbe
A1:I1 255255065535
Zellen mit Füllfarbe automatisch werden nicht dargestellt



Code:
  'Add headings for our lists. Expand as needed
  WsNew.Range("A1:I1") = Array("Shape Name", "Shape Type", "Height", "Width", "Left", "Top", "MarginLeft", "MarginRight", "Sheet Name")
  'Loop through all Worksheet
  For Each wsLoop In Worksheets
      'Loop through all shapes on Worksheet
      For Each sShapes In wsLoop.Shapes
        'Increment Variable lLoop for row numbers[img]file:///I:/User/Downloads/Unbenannt.JPG.html[/img]
        lLoop = lLoop + 1
        With sShapes
            'Add shape properties
            WsNew.Cells(lLoop + 1, 1) = .Name
            WsNew.Cells(lLoop + 1, 2) = .OLEFormat.Object.Name
            WsNew.Cells(lLoop + 1, 3) = .Height
            WsNew.Cells(lLoop + 1, 4) = .Width
            WsNew.Cells(lLoop + 1, 5) = .Left
            WsNew.Cells(lLoop + 1, 6) = .Top
            'Follow the same pattern for more
            WsNew.Cells(lLoop + 1, 7) = .TextFrame2.MarginLeft
            WsNew.Cells(lLoop + 1, 8) = .TextFrame2.MarginRight
            WsNew.Cells(lLoop + 1, 9) = wsLoop.Name
        End With
      Next sShapes
  Next wsLoop
  'AutoFit Columns.
  WsNew.Columns.AutoFit

Wenn jetzt ein Commandbutton behandelt wird, werden zwar die Koordinaten ausgelesen aber dann kommt bei "TextFrame2.MarginLeft" usw. natürlich eine Fehlermeldung.
Bei Shapes funktioniert das aber hier nicht.

Wie kann ich a) den Fehler umgehen und b) auslesen welcher Text auf dem Button steht?
Schön wäre auch den Text von den allen Shapes auszulesen zu können.

Habt Ihr mir da ev. einen Lösungsvorschlag?
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#2
Hast du da eine Beispieldatei?
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#3
Hallo,

kuckst Du hier die Beispieldatei.


Angehängte Dateien
.xlsm   Test_Properties.xlsm (Größe: 47,12 KB / Downloads: 7)
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#4
Hallo Erich, :19:

hier mal deine Beispieldatei zurück: :21:

.xlsb   Shapes_Button_CommandButton_Properties_Text_Caption_auslesen.xlsb (Größe: 42,46 KB / Downloads: 10)
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • sharky51
Antworten Top
#5
Guten morgen Case,

das ist ja cool!

Herzlichen Dank für Deine Mühe!

Jetzt habe ich nur noch eine Frage.
Wie kann ich z.B. die "Rounded Rectangle 10_ContentButton" abhängig von der letzten Spalte, in der irgend etwas Beliebiges in einer Zeile steht, automatisch in der nächstfolgenden Spalte in Zeile "eins" platzieren? So wie z.B. auf der Tabelle "ShapePropertiesAll" zu sehen ist.

Das soll für alle Blätter gelten und die Shapes sollen natürlich in jedem Blatt automatisch platziert werden.

Ich hoffe ich habe das nicht zu umständlich beschrieben?
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#6
Hallo Erich, :19:

hier was zum spielen, damit du siehst, wie man Shapes positionieren kann. :21:

.xlsb   Shape_Position_alle_Tabellenblaetter_letzte_Spalte_plus_1_erste_Zeile.xlsb (Größe: 23,81 KB / Downloads: 6)
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • sharky51
Antworten Top
#7
Case,

Mann-o-Mann, das ist ja so was von super!

Vielen Dank! Du, Ihr seid die Besten!!!!! Angel

Wünsche noch einen schönen Sonntag.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#8
Es geht einfach so:


Es geht einfach so:

PHP-Code:
Sub M_snb()
  ReDim sn(10008)
    
  
For Each it In Sheets
    
For Each it1 In it.Shapes
      sn
(y0) = it1.Name
      sn
(y1) = it1.OLEFormat.Object.Name
      sn
(y2) = it1.Height
      sn
(y3) = it1.Width
      sn
(y4) = it1.Left
      sn
(y5) = it1.Top
      sn
(y6) = it1.TextFrame.MarginLeft
      sn
(y7) = it1.TextFrame.MarginRight
      sn
(y8) = it.Name
      y 
1
    Next
  Next
    
  Tabelle22
.Cells(201).Resize(UBound(sn), 9) = sn
End Sub 
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • sharky51
Antworten Top
#9
Hallo Case,

Nochmals cool.....das Ganze!

Aber ich habe mal ein wenig herumgespielt.
Wenn ich mehrere Shapes auf einem Blatt habe entsteht etwas Verwirrung.

Als Test habe ich mal diese drei Teile auf ein Blatt eingefügt
Button 1
Herz 1
Rechtwinkliges Dreieck 1

Mit Deinem Code schnappt sich dieser nur den Button 1 und läßt die andern beiden unbehelligt. Warum ausgerechnet den Button 1? Ich nehme an wegen der Bezeichnung, B kommt vor H usw.!
Wie kann man denn alle drei Shapes platzieren, am besten nebeneinander mit ein wenig Abstand, oder mit Angabe einer zusätzlichen Spaltenposition oder einem Offset.

Das erste Shape wird ja in die nächste freie Spalte platziert.

Code:
Sub Main2()
    Dim wksSheet As Worksheet
    For Each wksSheet In ThisWorkbook.Worksheets
        With wksSheet
            .Shapes(1).Top = .Cells(1, .Cells(1, .Columns.Count).End(xlToLeft).Column + 1).Top
            .Shapes(1).Left = .Cells(1, .Cells(1, .Columns.Count).End(xlToLeft).Column + 1).Left
        End With
    Next wksSheet
End Sub
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#10
Hallo Erich, :19:

nochmal was zum spielen: :21:

.xlsb   Shape_Position_mehrere_ein_Tabellenblatt_letzte_Spalte_plus_1_erste_Zeile.xlsb (Größe: 19,24 KB / Downloads: 3)
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • sharky51
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste