Positionieren Sie die neue Optionsschaltfläche genau in VBA

554
Kenny

Gibt es eine Möglichkeit, eine neue Optionsschaltfläche in VBA oder ein Makro genau zu positionieren und zu dimensionieren?

Der Code, den ich verwende, fügt eine neue Optionsschaltfläche ein, in der alle Zellen in einem Arbeitsblatt ausgewählt sind.

Wenn Sie den Code dann erneut ausführen, fügt er eine zweite Schaltfläche genau über der ersten ein.

Außerdem wird die Größe der Optionsfelder auf die der ausgewählten Zelle festgelegt.

Ich muss in der Lage sein, in dem Code die Zelle anzugeben, in der die neue Optionsschaltfläche F15 eingefügt werden soll, und die genaue Größe der Schaltfläche sowie die Position links / rechts und oben / unten festzulegen.

Dies bedeutet, dass die Wahltaste immer in derselben Zelle, an derselben Position und in derselben Größe eingefügt wird.

Kann das gemacht werden?

Der Code zum Erstellen / Einfügen des neuen Optionsfelds lautet:

Sub AddOptionButton() With ActiveSheet.OptionButtons.Add(Selection.Left, Selection.Top,  Selection.Width, Selection.Height) .Name = "NewOptionButton" .Caption = "Green" End With End Sub 
0

1 Antwort auf die Frage

0
cybernetic.nomad

Im Allgemeinen möchten Sie die Verwendung von Auswahlen im Code vermeiden

Sie können den Bereich einer Variablen zuweisen und die Schaltfläche darin platzieren:

Sub AddOptionButton() Dim myRange as Range  Set myRange = Range("C3") With ActiveSheet.OptionButtons.Add(myRange.Left, myRange.Top, myRange.Width, myRange.Height) .Name = "NewOptionButton" .Caption = "Green" End With End Sub 

Es kann jedoch besser sein, den Bereich an eine Funktion zu übergeben:

Function AddOptionButton(myRange as Range) With ActiveSheet.OptionButtons.Add(myRange.Left, myRange.Top, myRange.Width, myRange.Height) .Name = "NewOptionButton" .Caption = "Green" End With End Function 

Welches Sie von überall aus anrufen können Sub:

Call AddOptionButton(Range("F15")) 
Sieht gut aus und ich werde es versuchen, aber bitte verzeihen Sie meine Unwissenheit, wenn ich das frage - was ist meinRange? Muss ich das ändern oder benutze ich es so? Kenny vor 5 Jahren 0
MyRange ist eine Variable. Sie können es wie folgt deklarieren: `Dim myRange as Range` (Antwort wurde entsprechend bearbeitet) cybernetic.nomad vor 5 Jahren 0
Eine "Funktion", die ihren Rückgabewert nicht verwendet, sollte ein "Sub" sein, imo. Eine Funktion ist nicht dadurch definiert, dass sie Argumente annehmen kann, sondern durch die Fähigkeit, einen Wert / ein Objekt zurückzugeben. `Sub`s können Argumente gut vertragen. Machen Sie es zu `Sub AddOptionButton (myRange as Range)` ** oder **, um einen Verweis auf die von ihm erstellte Schaltfläche zurückzugeben: `Funktion AddOptionButton (myRange as Range) als OptionButton`. Die `Call`-Anweisung wird auch nicht benötigt, sodass Sie in der letzten Zeile` AddOptionButton Range ("F15") `schreiben können. Inarion vor 5 Jahren 0