2017-11-17 3 views
1

Ich habe mehrere Tasten in diesem Makro und alles funktioniert gut und sieht gut aus, aber ich hatte eine Frage über den Code. Wie Sie unten in diesem Codeschnipsel sehen können, verwendet der Code With Activesheet.Shapes AND .BUTTONS. Es sieht so aus, als ob .Shapes mehr mit der Größe der Schaltfläche zu tun hat, nachdem sie platziert wurde? und .BUTTONS hat mehr damit zu tun, wie es aussieht und was es tut?Form Steuert den Unterschied bei der Verwendung von .Shapes und der Verwendung von .buttons im Code?

Ich frage mich nur, was der Unterschied in diesen sind, weil an einem Punkt verwende ich .BUTTONS, um die Schaltflächen hinzuzufügen, und dann verwende ich .shapes, um die Größe der Schaltflächen zu ändern. Aber dann benutze ich .Shapes, um es zu sagen, was zu tun ist OnAction, wenn anstelle von .BUTTONS geklickt wird. Was genau ist der Unterschied in diesen Eigenschaften? (oder wie auch immer es heißt, bin ich mir nicht sicher) Es scheint nur, als ob sie sich ineinander verflechten und ich bin mir nicht sicher, welches ich wann verwenden soll.

With Activesheet 
    .BUTTONS.Add(53.25, 36.75, 190.5, 41.25).Select 
    .Shapes("Button 6").IncrementLeft 222.75 
    .Shapes("Button 6").IncrementTop 147 
    .BUTTONS("Button 6").Text = "Mexmo MFG" 

    .BUTTONS("Button 10").Text = "10" 
    .BUTTONS("Button 10").name = "Button 10" 
    .BUTTONS("Button 11").Text = "11" 
    .BUTTONS("Button 11").name = "Button 11" 
    .BUTTONS("Button 12").Text = "12" 
    .BUTTONS("Button 12").name = "Button 12" 

    .Shapes("Atlanta MFG").OnAction = "Atlanta" 
    .Shapes("Denver MFG").OnAction = "Denver" 
    .Shapes("Jackson MFG").OnAction = "Jackson" 
    .Shapes("Louisville MFG").OnAction = "Louisville" 
End With 
+2

Shapes ist nur eine Sammlung aller Shape-Objekte auf dem angegebenen Blatt. So enthält es als Untermenge alle Ihre Buttons und alles andere in Ihrem WB, das eine Form ist (Diagramme, Texboxen usw.). Die .buttons() scheinen eine Sammlung aller Schaltflächen in Ihrer Arbeitsmappe zu sein. Sie können das gleiche tun, aber ich würde mit den .buttons() bleiben. Das Mausklick-Ereignis Buttons könnte dazu verwendet werden, Ihre Makros auszulösen. – mooseman

+1

Sooooo im Grunde alle Tasten sind Formen, aber nicht alle Formen sind Tasten? vielleicht vielleicht? haha danke für deine antwort. Es hilft ein bisschen mehr Sinn tatsächlich mit dieser anderen Antwort auch zusammen. – Robillard

Antwort

4

Einige Eigenschaften sind nur verfügbar und optimiert werden können nur Shape Objekt. Deshalb hat Ihr Code Buttons und Shapes Sammlungen.

Die meisten Objekte, die von Shapes erben, geben normalerweise die Eigenschaft ShapeRange frei, die das Shape-Objekt zurückgibt. Sie können das einfach verwenden und auf alle zugehörigen Eigenschaften zugreifen.


Beispiel:

Sub test() 
    With ActiveSheet 
    .Buttons.Add(53.25, 36.75, 190.5, 41.25).Select 
    .Shapes("Button 6").IncrementLeft 222.75 

    '/ This works same as Shapes("Button 6") 
    .Buttons("Button 6").ShapeRange.IncrementTop 147 

    .Shapes("Button 6").IncrementTop 147 
    End With 
End Sub 
+1

Ah sehr nett! Vielen Dank. Ich dachte an einige der Aktionen, die ich gerade machte, wie 'Shapes.OnAction' sollte' BUTTONS.OnAction' sein, weil ich auf den Knopf geklickt habe, den du kennst? Aber wie du gesagt hast ist es eine Art, wenn ich es einfach anders mache. Es macht jetzt ein bisschen mehr Sinn. – Robillard

0

Erweiterung Antwort des @ cyoashu, ist es erwähnenswert, dass die .Buttons.Add() Methode die zusätzliche Taste zurückkehrt, so dass Sie, dass direkt in Ihrem With Block verwenden:

Sub test() 
    With ActiveSheet.Buttons.Add(53.25, 36.75, 190.5, 41.25) 
     .Name = "Blah" 
     .Text = "Blah" 
     .OnAction = "DoSomething" 
     With .ShapeRange 
      .IncrementLeft 222.75 
      .IncrementTop 147 
      .IncrementTop 147 
     End With 
    End With 
End Sub 

... was Sie davon abhält, etwas über den Namen der soeben hinzugefügten Schaltfläche zu wissen.

Verwandte Themen