[VBA] Name einer Checkbox auslesen
#1
Hallo zusammen,

ich möchte gerne den Namen einer Checkbox auslesen um ihn dann im Script weiter zu verwenden.

Szenario:

Ich habe eine Checkbox "Januar". (später auch Feb, März, etc.)

Nun wäre es schön, wenn ich in meinem Script jeweils den dazugehörigen Checkbox Namen auslesen kann:

Code:
Private Sub Januar_Click()

cname= _checkboxname_

If cname.Value = True Then
..
_checkboxname_ soll in dem Fall dann "Januar" sein. 
So kann ich weiter unten im Script cname als Variable verwenden mit dem Wert "Januar".

Heißt meine Checkbox nun Februar, erkennt er automatisch den Namen und ich muss das Script nicht mehr für jede Checkbox anpassen.

Macht Sinn? Ist möglich?

Smile Freue mich auf Hilfe.

VG
Top
#2
Hallo,

ich halte nicht viel davon, solche Objekte mit neuen Namen zu versehen. Wenn du die Standardnamen wie CheckBox1 usw. stehen lässt, kann man auf die Nummer referenzieren, 1 = Januar usw. Für einen konkreteren Vorschlag müsste man etwas mehr über deine Datei wissen.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
Hallo Klaus-Dieter,

danke für deinen Vorschlag.

Es ist allerdings so, dass ich die Variable weiter im Script nutzen möchte.
Hier mein Script - bislang ohne die Variable - für "Januar", aus dem hervorgehen soll, weshalb:

Code:
Private Sub Januar_Click()
Dim lngLastRow As Long

cname = _NameDerCheckbox_ ??

letztespalte = Sheets("Übersicht").Cells(4, Columns.Count).End(xlToLeft).Column

 If cname.Value = True Then
 With Sheets("Übersicht")
   .Cells(2, letztespalte + 1).Formula = "cname "
   .Cells(4, letztespalte + 1).FormulaR1C1 = "=" & cname & "!R[1]C[9]"
   
     lngLastRow = .Cells(Rows.Count, letztespalte + 1).End(xlDown).Row
       .Range(.Cells(4, letztespalte + 1).Address, .Cells(lngLastRow, letztespalte + 1).Address).FillDown
End With

    Else

Dim Such
    Do
      Set Such = Worksheets("Übersicht").UsedRange.Find("cname")
      If Not Such Is Nothing Then Such.EntireColumn.Delete
    Loop Until Such Is Nothing
        End If
   
End Sub

So müßte ich nur hingehen und meine Checkboxen "Januar", "Februar", etc. nennen und kann das Script gleich lassen.

Gruss
Top
#4
(27.07.2018, 12:51)jules schrieb: So müßte ich nur hingehen und meine Checkboxen "Januar", "Februar", etc. nennen und kann das Script gleich lassen.

Wenn das Makro Private Sub Januar_Click() heißt, gehe ich davon aus, dass es sich um ein ActiveX-Objekt handelt. Dann bräuchtest Du sowieso insgesamt 12 Makros für alle Monate.

Gruß Uwe
Top
#5
Hi Uwe,

das ist richtig. Es handelt sich um ein ActiveX-Objekt.
Ich bräuchte zwar 12 Activex-Objekte (Checkboxen), könnte aber in jeder den selben Code verwenden, da er den Namen ja aus dem Checkbox nimmt - ...wenn er ihn denn mal nehmen würde :)

Gerne lasse ich mich aber auch von einer Alternative überzeugen?
Top
#6
Hallo,

es ist kein Problem, den Name einer CheckBox zu setzen und wieder auszulesen.

Der Ansatz, ein Script für 12 ChkBx ist gut, aber die Details müssen sehr genau aufeinander abgestimmt werden. Z.B. vergibt xl fortlaufenden Namen, d.h. jede Änderung muss sehr sorgfältig geplant sein.

Ist es möglich eine Beispieldatei zu zeigen, mit den 12 ChkBx und den Commandbuttons? Gibt es weitere Shapes auf diesem Sheet?

mfg
Top
#7
Hi Fennek,

ein Beispiel habe ich leider nicht, da die Chechboxen + Script teil einer größeren Mappe sind.
Ich habe jedoch mein Script für Januar etwas weiter oben geposted. Es gibt noch 3 weitere CommandButtons auf dem Sheet.
Und dann eben die 12 Checkboxen, welche eben ausgelesen werden sollen.

Wie würdest du hingehen und besagte Checkboxen auslesen?
Top
#8
Hallo Jules,

es bringt nichts, wenn du versuchst eine Lösung auf der Basis dessen, was du bereits hast zu erzwingen, indem du uns weitere Informationen vorenthältst. Wenn man das ganze Umfeld kennt, kann man auch über andere Lösungen nachdenken. 12 mal das gleiche Makro ist sicher kein guter Ansatz.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#9
Hi,

ich habe euch meine Datei mal hochgeladen. Vielleicht erkennt ihr dann eher was ich vorhabe und wir finden eine Lösung.
Aktuell sind - zum Testen - nur 2 Checkboxen (Januar + Februar). Insg. werden es wie bereits gesagt 12.

Zusätzlich gilt es zu beachten, dass die Variable "cname" aktuell aus einer Zelle gelesen wird und sowohl für Januar, als auch für Februar gleich ist.
( cname = Tabelle1.Range("Monat").Value ) - dies ist natürlich nicht richtig Smile

LG


Angehängte Dateien
.xlsb   BeispielMappe.xlsb (Größe: 1,09 MB / Downloads: 7)
Top
#10
Hallo,

ohne die Datei zu kennen:

Eine Frage an die Schwarm-Intelligenz:

Wie löscht man den sichtbaren Text?

Code:
Sub Makro1()
Dim Ole As OLEObject
For i = 1 To 12
    With Cells(i, 1)
         ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
            DisplayAsIcon:=False, Left:=.Left, Top:=.Top, Width:=33.75, Height _
            :=21.75).Select
    End With
Next i
End Sub
Sub Rename()
Dim Ole As OLEObject

For Each Ole In ActiveSheet.OLEObjects
    '########### Fehler #########
    Ole.ShapeRange.TextFrame2.DeleteText
    '##############################
    i = i + 1
    MM = Application.GetCustomListContents(8)(i)
     Ole.Name = MM
     Debug.Print Ole.Name
Next Ole
End Sub

mfg
Top


Gehe zu:


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