PDA

Vollständige Version anzeigen : Sub Label_Click


F.Schweiger
01.07.2015, 16:45
Hallo zusammen,

habe mir ein Tabellenblatt mit mehreren Punkten zum Ankreuzen erstellt. Das Ankreuzen habe ich mit einem Label und diesen Sub gelöst.


Private Sub Label1_Click()
If Label1.Caption = Chr$(163) Then
Label1.Font = "Wingdings 2"
Label1.Caption = "T"
globalBoolLabel1Ausgewählt = True
Else
Label1.Caption = Chr$(163)
Label1.Font = "Wingdings 2"
Label1.Caption = "£"
globalBoolLabel1Ausgewählt = False
End If
End Sub

Zu meiner Frage, ist es möglich das ich diesen Sub auf alle Labels ausführen lässt oder muss ich ihn für jedes Label einzeln machen?

Gruß,
Flo

Beverly
01.07.2015, 17:20
Hi Flo,

schau dir mal das Beispiel CheckBox vergrößert (http://excel-inn.de/dateien/vba_beispiele/checkbox_vergroessert.zip) auf meiner HP, Seite Beispiele m. VBA (http://excel-inn.de/vba_beispiele.htm) an - vielleicht kannst du das als Grundlage verwenden. Es wird allerdings kein ActiveX-Steuerelement sondern ein Textfeld aus den Formen verwendet.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

F.Schweiger
01.07.2015, 18:20
Hi Beverly,

das find ich echt super, haut auch sehr gut hin. Möchte gerne noch wissen ob man die Textfelder auch über mehrere Tabellenblätter verbinden kann wenn sie z.B. den gleichen Namen besitzen?

Auf jeden fall ist das eine super Lösung die ich auch benutzen werde.
Du hast mir schon sehr weitergeholfen, vielen Dank.

Gruß,
Flo

Beverly
01.07.2015, 18:31
Hi Flo,

durch die Verwendung von ActiveSheet.Shapes(Application.Caller) spielt es keine Rolle, in welchem Tabellenblatt sich das Textfeld befindet und welchen Namen es trägt - ActiveSheet ist ja das gerade aktive Tabellenblatt und Application.Caller ist das das Makro aufrufende Objekt.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

F.Schweiger
01.07.2015, 18:42
Hi Beverly,

das habe ich schon verstanden, ist auch super so. Was ich meine, dass ich 3 Punkte habe die in allen Tabellenblätter vorkommen die immer identisch sein sollen (angekreuzt oder nicht), und um sie nicht einmal zu vergessen oder immer kontrollieren zu müssen sie von einander abhängig zu machen?
Geht das?

Gruß,
Flo

Beverly
01.07.2015, 19:52
Hi Flo,

wie meinst du das konkret?

Wenn du ein bestimmtes von den aufrufenden Shapes ansprechen willst, dann kannst du das einfach mit Application.Caller

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

F.Schweiger
01.07.2015, 20:10
Hi Beverly,

ich meine damit das wenn ich so eine TextBox (z.B. Tabelle1) anklicke das die TextBoxen der gleichen Punkte in den anderen Tabellen den gleichen Wert erhalten (angekreuzt oder nicht angekreuzt). Sie miteinander zu verknüpfen, ist das möglich?

Gruß,
Flo

Beverly
02.07.2015, 06:34
Hi Flo,

sind alle Tabellen identisch aufgebaut und/oder haben alle Textfelder die selben Namen oder woran erkennt man sonst, welche Textfelder miteinander korrelieren sollen?

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

F.Schweiger
02.07.2015, 11:01
Hi Beverly,

ich hätte es momentan so aufgebaut das alle Textfelder den selben Namen besitzen die ich miteinander steuern möchte da die Tabellen doch von einander abweichen.

Gruß,
Flo

Beverly
02.07.2015, 11:40
Hi Flo,

nach diesem Prinzip:

Sub SimulationCheckBox()
Dim wksTab As Worksheet
Dim strElement As String
With ActiveSheet.Shapes(Application.Caller)
strElement = .Name
With .OLEFormat.Object
If .Text = Chr(254) Then
.Text = Chr(168)
Else
.Text = Chr(254)
End If
End With
For Each wksTab In Worksheets
If wksTab.Name <> ActiveSheet.Name Then '<== hier eventuell weitere Tabellenblätter ausschließen
wksTab.Shapes(strElement).OLEFormat.Object.Text = _
.OLEFormat.Object.Text
End If
Next wksTab
End With
End Sub



Es wird davon ausgegangen, dass ALLE Tabellenblätter das betreffende Textfeld beinhalten. Andernfalls musst du diese Tabellenblätter noch ausschließen, damit der Code nicht auf einen Fehler läuft.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

F.Schweiger
02.07.2015, 17:36
Hi Beverly,

hab das jetzt probiert und es läuft ohne Probleme. Ich hoffe ich nerve jetzt nicht langsam, aber ich hätte noch dazu eine frage. ich muss doch dem Textfeld /-er das Makro zuweisen, aber durch das kopieren in eine neue Mappe wird der Pfad der alten Datei benutzt und beim benutzen des Textfeld /-er öffnet er die Datei aus der ich das Tabellenblatt kopiert habe.
Lässt sich das ändern oder muss ich die Makros immer neu zuweisen wenn ich auch das Modul in die neue Mappe Kopiert habe?

Gruß,
Flo

Beverly
02.07.2015, 18:00
Hi Flo,

du kannst das Makro neu zuweisen - nach diesem Prinzip:

Sub Zuweisen()
Dim txtBox As TextBox
For Each txtBox In ActiveSheet.TextBoxes
txtBox.OnAction = "SimulationCheckBox"
Next txtBox
End Sub


<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

F.Schweiger
02.07.2015, 18:16
Hi Beverly,

find das super, keine weiteren Fragen.
Vielen Dank, du bist einfach super.

Gruß,
Flo