2017-03-06 5 views
0

Ich habe derzeit eine ganze Reihe von Arbeitsmappen, die jeweils ein Blatt mit Hunderten von Formen enthalten. Ich brauche einen Code, um die breiteste Form von ihnen auszuwählen und den Wert ihrer Breite zu erhalten. DankeSchleifen durch Formen, um Dimensionen zu erhalten

Sub GetWidestShape() 
     for each shape in activesheet.shapes 
     ' if shape is widest then 
     ' shape.copy 
     ' range("a1").value=the width of the widest shape 
    end sub 
+0

Willkommen bei Stackoverflow! Wenn Sie eine Frage posten, geben Sie bitte Ihren Code frei und versuchen Sie, Ihr Problem so gut wie möglich zu erklären. Im Moment ist es sehr unklar, wonach Sie fragen. –

+0

Welchen genauen Teil dieses Problems haben Sie? –

+0

Hallo nochmal. Tut mir leid, dass ich in den Fragen nicht so klar bin. Hier ist ein Teil des Codes, um besser zu erklären – user7381321

Antwort

1

könnten Sie eine Funktion verwenden, um die breiteste Form zurückzukehren und seine Breite festgelegt, zu

Function GetWidestShape(widestShpWidth As Long) As Shape 
    Dim shp As Shape 

    For Each shp In ActiveSheet.Shapes 
     If shp.Width > widestShpWidth Then 
      widestShpWidth = shp.Width 
      Set GetWidestShape = shp 
     End If 
    Next 
End Function 

, die Sie in Ihrem Haupt Code ausgenutzt werden könnte wie folgt:

Sub Main() 
    Dim widestShp As Shape 
    Dim widestShpWidth As Long 

    Set widestShp = GetWidestShape(widestShpWidth) '<--| get the widest shape along with ist width 
    With widestShp 
     ' ... 
     ' your code to act on referenced shape 
     '... 
    End With 
End Sub 

natürlich ist die Dual Ansatz auch möglich:

Function GetWidestShapeWidth(widestShp As Shape) As Long 
    Dim shp As Shape 
    Dim widestShpWidth As Long 

    For Each shp In ActiveSheet.Shapes 
     If shp.Width > widestShpWidth Then 
      widestShpWidth = shp.Width 
      Set widestShp = shp 
     End If 
    Next 
End Function 


Sub Main() 
    Dim widestShp As Shape 
    Dim widestShpWidth As Long 

    widestShpWidth = GetWidestShapeWidth(widestShp) '<--| get the width of the widest shape along with the widest shape   
    With widestShp 
     ' ... 
     ' your code to act on referenced shape 
     '... 
    End With 
End Sub 
+0

@ user7381321, wenn meine Antwort Ihre Frage löst, dann akzeptieren Sie es bitte, indem Sie auf das Häkchen neben der Antwort klicken, um es von ausgegraut zu ausgefüllt zu verschieben. Danke – user3598756

0

Bei einer Vermutung wäre es so etwas wie diese .... Hinweis Ich habe dieses Recht zu testen jetzt keinen Zugang bekommen.

Sub GetWidestShape() 
     dim widest 
     dim i as int; 
     i=0 

     for each shape in activesheet.shapes 
      if(shape.width > widest.width or i =0) then 
       widest = shape 
      end if 
      i++ 
     next 
     'Do whatever you want with the shape. 
     'you should be able to refrence the shape with the variable/object name "widest" 
     'E.g range("a1").value=widest.width 
end sub 
Verwandte Themen