Clever-Excel-Forum

Normale Version: Mit Makro über Optionbuttons Zellen einfügen und Namen ändern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

in einer UserForm sind zwei OptionButtons und ein CommandButton gesetzt.

Mittels eines Makros soll nun eine neue Zeile oder Spalte über den jeweiligen OptionButton eingefügt werden können, und in einem zweiten Schritt abgefragt werden, ob die neu eingefügten Zellen in einen bestimmten Namensbereich (der in einem anderen Makro verwendet wird) übernommen werden sollen.

Bisher verwende ich folgenden Ansatz für das Einfügen einer Spalte (hier mit Abfrage für Schritt 2, aber noch nicht eingebunden).

Code:
Private Sub CommandButton1_Click()
         Dim x As Control
           For Each x In UserForm1.Controls
               If x.Value = True Then
               If MsgBox("Namensbereich ändern?", vbOKCancel) = vbOK Then
               Selection.EntireColumn.Insert
               Else
               Exit Sub
               End If            
               End If
           Next
     End Sub
Wie ist zunächst für das Einfügen einer neuen Zeile oder Spalte zu kodieren?

Danke!

Steini
Hallo Steini,

Du hast doch das Einfügen einer Spalte schon im Code. Zeile geht genau so:
Selection.EntireRow.Insert
Wenn Du das nicht an Stelle der Selection haben willst, dann definiere die Zelle, z.B. Range("A1") statt Selection.
Hallo André,

danke für den Code zum Einfügen einer Zeile.

Mit dem bisherigen Code kann derzeit eine Spalte eingefügt werden, unabhängig davon, ob der Optionbutton für Spalte oder Zeile geschaltet wird. Ziel ist, Zellen in Abhängigkeit von der Optionbutton-Auswahl hinzuzufügen, also in einfachen Worten:

falls Auswahl Optionbutton = Zeile, soll eine Zeile hinzugefügt werden,

und

falls Auswahl Optionbutton = Spalte, soll eine Spalte hinzugefügt werden.

Liegt es an der Variablen und der Wertezuweisung?

Steini
Hallo Steini,

ich weiß ja nun nicht, warum Du die verschiedenen Controls durchforstest. Ich würde den Zustand der Optionbuttons abfragen oder je nachdem sogar auf den Click auf den Optionbutton reagieren.

Wenn es beim CommandButton bleiben soll, dann kannst Du die OptionButtons im Prinzip so abfragen:
Code:
Private Sub CommandButton1_Click()
If Me.OptionButton1.Value = True Then MsgBox 1 Else MsgBox 2
End Sub
Hallo Steini,

so vielleicht?

Code:
Private Sub CommandButton1_Click()
 Dim rngB As Range
 If OptionButton1 Then Set rngB = Selection.EntireRow
 If OptionButton2 Then Set rngB = Selection.EntireColumn
 If Not rngB Is Nothing Then
   If MsgBox("Namensbereich ändern?", vbOKCancel) = vbOK Then rngB.Insert
 End If
End Sub

Gruß Uwe
Hallo!

Uwe, Dein Code trifft es ziemlich genau. Vielen Dank!

Danke André, auch für Deinen Code und den Ansatz, auf den CommandButton zu verzichten und stattdessen auf die Optionbuttons zu reagieren. Dies kam mir auch schon in den Sinn, und ich finde dies auch viel eleganter.  

In einer zweiten Abfrage soll nun festgelegt werden können, ob die neu eingefügten Zellen in den Namensbereich übernommen werden sollen oder nicht.

Offensichtlich werden die Zellen mit dem Einfügen automatisch in den Namensbereich übernommen.

Wie könnte hier die Übernahme gesteuert werden? Gibt es bspw. eine Funktion dergestalt, dass in einem bestimmten Zellbereich alle Zellen außer XY angesprochen werden können (und damit der Bereichsbezug des Namens geändert werden kann)?

Steini
Hallo Steini,

was meinst Du mit "alle Zellen außer XY" ?
Wenn Du innerhalb eines benamten Bereiches Zellen einfügst, wird der Bereich entsprechend vergrößert.
Wenn Du das nicht willst, die Daten ohne Bereichsänderung weitergeschoben werden sollen, müsstest Du die Daten erst "umkopieren" und dann die neuen Daten auf die frei gewordenen Zellen einfügen.