Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mehrere labels klick ereigniss

Forumthread: mehrere labels klick ereigniss

mehrere labels klick ereigniss
04.11.2024 12:27:34
tonli2410
Hallo zusammen,
ich habe in einem Tabellenblatt 31 labels die als Button fungieren. Damit springe ich in ein bestimmtes Sheet (SheetName ist in der jeweiligen Zelle)
Hier zur Verdeutlichung ->

Private Sub Label1_Click()
If Range("B5").Value > "" Then Sheets(Cells(5, 2).Value).Select
End Sub
Private Sub Label2_Click()
If Range("B6").Value > "" Then Sheets(Cells(6, 2).Value).Select
End Sub
Private Sub Label3_Click()
If Range("B7").Value > "" Then Sheets(Cells(7, 2).Value).Select
End Sub

usw.

Hat jemand eine Idee wie ich den Code verkleinern kann - Schleife oder so?

Vielen Dank im Voraus und beste Grüße

Toni
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mehrere labels klick ereigniss
04.11.2024 12:45:28
Piet
Hallo

da hast du dir aber vieeeel Arbeit gemacht, macht man als Anfänger. Was hälst du von meinem Code???
Ein Button, ein Code, fertig. Mehr brauchst du nicht! Liste dir alle Sheets namentlich in einer Tabelle auf.
Dann klickst du mit dem Cursor auf das Sheet, und betätigst den Button. So einfach geht das bei mir.

mfg

Sub Sprung_zum_Sheet()

Dim Sht As String
On Error Resume Next
Sht = ActiveCell.Value
Worksheets(Sht).Select
End Sub
Anzeige
AW: mehrere labels klick ereigniss
04.11.2024 12:56:33
tonli2410
Hallo Piet,
vielen Dank für Deine Antwort :-)
Das war die erste Idee, die ich auch hatte.
Das finde ich persönlich etwas "umständlich".
Oder sagen wir einfach zu langsam - erst das jeweilige Sheet auswählen und dann klicken.

Trotzdem, wie gesagt, vielen Dank :-)
Dann belasse ich es bei den 31 cklick ereignissen. Funktioniert ja einwandfrei
Dachte es gäbe die Möglichkeit es in einer Schleife einzuarbeiten

VG
Toni
Anzeige
AW: mehrere labels klick ereigniss
04.11.2024 13:03:57
Onur
Wieso nimmst du nicht einfach einen Doppelklick in die Zelle mit dem Blattnamen ? Ist das wieder "einen Klick zuviel" ?
AW: mehrere labels klick ereigniss
04.11.2024 12:46:44
Onur
"ich habe in einem Tabellenblatt 31 labels " ?
Wer glaubt, er brauche unbedingt 31 Labels zum Draufklicken, muss halt auch mit den Konsequenzen leben.
Warum nimmst du nicht einfach ein Auswahlfeld mit den 31 Namen der Blätter und EIN Button ?
Anzeige
AW: mehrere labels klick ereigniss
04.11.2024 12:52:49
Alwin Weisangler
Hallo Toni,

sind die Labels Controls in einem Userform oder AktiveX.
Ansonsten gibt es 2 Wege dies zu verkürzen.
- eine kleine Funktion, welche im Klickevent aufgerufen wird (ist in deinen Fall aber nicht kürzer)
- eine Klasse anlegen und die Labels diese Klasse zuweisen.
Dazu braucht es eine Beispieldatei oder eindeutige Aussagen.

Gruß Uwe
Anzeige
AW: mehrere labels klick ereigniss
05.11.2024 15:02:37
Piet
Hallo

ich habe dir mal ein fertiges Makro geschrieben um dein Problem in zwei Schritten zu lösen.
Liste dir bitte zeurst alle Sheets die du anspringen willst in einer Tabelle auf. Bei mir "Tabelle1"
Dann kannst du mit dem 2. Makro 30 Button erstellen, die alle den gleichen Abstand haben.
Das Makro ist schon zuewiesen und klappt bei mir einwandfrei. Der Sheetname muss stimmen!

Zur Zeit werden zum testen nur drei neue Button erstellt. Die Grösse musst du selbst optimieren!
Viel Spass beim Testen. Bin gespannt wie du damit zufrieden bist.

mfg Piet



'alle Tabellern auflisten
Sub Tabellen_auflisten()
With Worksheets("Tabelle1")
For j = 1 To Worksheets.Count
Cells(j + 2, 2) = Worksheets(j).Name
Next j
End With
End Sub


'Button per Makro erstellen
Sub Button_erstellen()
With Worksheets("Tabelle1")
Links = 72 'Bildschirm Anordnung
Oben = 27
Breite = 81 'Grösse deines Buttons
Höhe = 21
Makro = "Sprung_zurTabelle" 'Makroname

For j = 1 To 3
ActiveSheet.Buttons.Add(Links, Oben, Breite, Höhe).Select
Selection.Characters.Text = .Cells(j + 2, 2) 'Caption
Selection.Placement = xlMove 'Nur von Platz abhängig
Selection.OnAction = Makro 'Makro zuweisen
Oben = Oben + 40 '40= Abstand zum nächsten Button
Next j
End With
End Sub

'Sprung zur Tabelle
Sub Sprung_zurTabelle()
Sht = ActiveSheet.Buttons(Application.Caller).Text
Workbooks(Sht).Select
End Sub
Anzeige
AW: mehrere labels klick ereigniss
04.11.2024 12:55:43
Onur
"sind die Labels Controls in einem Userform oder AktiveX. " ?
Controls auf einer Userform sind immer Active-X.
AW: mehrere labels klick ereigniss
04.11.2024 13:00:55
tonli2410
Hallo Onur,

es ist kein Problem damit zu leben, auf jeden Fall ist es so am schnellsten über die jeweiligen Labels (für jedes Sheet) auf das jeweilige Tabellenblatt zu springen.
Wollte nur wissen, ob jemand eine Idee hat wie ich den Code verkleinern kann.

Trotzdem auch Dir vielen Dank und VG
Toni
Anzeige
AW: mehrere labels klick ereigniss
04.11.2024 12:57:46
tonli2410
Hallo Uwe,
es sind ActiveX Labels :-)

Gruß
Toni
AW: mehrere labels klick ereigniss
04.11.2024 21:17:02
Alwin Weisangler
Unter der Voraussetzung, dass die Labels der Zeilennummer passend zugeordnet sind, könnte man es auch mit der TopLeftCell Adresse in Kalssse zuordnen.

Beispielhaft im Klassenmodul (cls_Label Labels befinden sich wie in meiner Beispieldatei in Spalte C ab Zeile 5) wäre dies so:


Private Sub oLabel_Click()
Dim rngAdr$: rngAdr = oLabel.TopLeftCell.Address
If Range(rngAdr).Offset(0, -1).Value > "" Then Sheets(Tabelle1.Range(rngAdr).Offset(0, -1).Value).Select
End Sub


Gruß Uwe
Anzeige
AW: mehrere labels klick ereigniss
04.11.2024 22:27:47
Alwin Weisangler
Sorry, da war im Satz ein Schreibfehler drin - richtig so:
Unter der Voraussetzung, dass die Labels der Zeilennummer passend zugeordnet sind, könnte man es auch mit der TopLeftCell Adresse in Klasse zuordnen.

Gruß Uwe
AW: mehrere labels klick ereigniss
04.11.2024 21:32:13
Piet
Hallo

das ist ein Standard SortierCode bei dem ich -SelectCase- verwende. Den kannst du dir umbauen.
Wenn die für Adr1 die Variable Sht eingibst, kannst du damit jedes beliebige Sheet anspringen.
Der Trick beruht darauf, das jeder Button eine End-Nummer haben muss, von 1-99
Bei Aplication.Caller wird diese Button Nummer ermittelt und zugeordnet.

mfg Piet

Option Explicit        '26.5.2023

Dim Bereich As String, lz1 As Long
Dim Adr1 As String, Schfla As Integer


Sub Übersicht_Case_sortieren()
Schfla = Right(Application.Caller, 2)
lz1 = Cells(Rows.Count, 3).End(xlUp).Row
If lz1 6 Then Exit Sub

Select Case Schfla
Case 2: Adr1 = "B7"
Case 3: Adr1 = "C7"
Case 4: Adr1 = "D7"
Case 5: Adr1 = "E7"
Case 6: Adr1 = "F7"
Case 7: Adr1 = "G7"
Case 8: Adr1 = "H7"
Case 9: Adr1 = "J7"
Case 10: Adr1 = "A7"
End Select

'Range(Adr1).Select: MsgBox Schfla: End '** zum Test

If Adr1 = "F7" Then
Range("A7:J" & lz1).Sort Key1:=Range(Adr1), Order1:=xlAscending, _
Key2:=Range("D7"), Order2:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Else
Range("A7:J" & lz1).Sort Key1:=Range(Adr1), Order1:=xlAscending, Header:= _
xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End If
ActiveWindow.ScrollRow = 1
End Sub
Anzeige
AW: mehrere labels klick ereigniss
05.11.2024 10:24:29
tonli2410
Hallo Piet,

also nur zum Verständnis: Wie oder besser gesagt, wo rufe ich den Sub Übersicht_Case_sortieren() auf.
Ich habe ihn mal im Sub Label1Click() aufgerufen und erhalte den Fehler 2023 zum Application.Caller

VG und Danke im Voraus
Toni
AW: mehrere labels klick ereigniss
05.11.2024 14:14:24
Piet
Hallo

das Makro ist für max 100 Button ausgelegt, aber KEINE AktiveX Elemente, sondern CommandButton!
Die bekommen alle als Makro den Code zugewiesen. Mit Caller wird die Button Nummer ausgewertet.
Bei AktiveX Elemente klappt das nicht, weil jedes X-Element ein -eigenes Klick- Makro hat!
Guck bitte mal im Entwurfmodus nach den alten CommandButtons. Damit klappt es!

mfg Piet
Anzeige
AW: mehrere labels klick ereigniss
04.11.2024 13:59:14
daniel
Hi
Wenn du ActiveX-Labels hast, musst du die Klassenprogammierung anwenden.
dh du musst eine eigene Klasse von Labels erstellen. Dann musst du diese Labels dieser Klasse zuweisen und du kannst dann für diese Klasse ein gemeinschaftliches Klick-Event erstellen. Dort musst du dann über die Position des Elements die richtige Zelle ermitteln und dann zu diesem Blatt springen.

etwas einfacher geht es, wenn du statt ActiveX-Labels einfache Grafikelemente erstellst.
diesen kannst du dann ein Makro aus einem allgemeinen Modul zuweisen, welches dann bei Klick ausgeführt wird.
dieses Makro kannst du dann mehreren Grafikelementen zuweisen (über das Kontextmenü)
auch dieses Makro muss dann aus der Position des Labels die richtige Zelle referenzieren, damit ein Makro für alle Labels verwendet werden kann.
das Makro sieht dann so aus:

Sub BeiKlick()

dim Zeile as long
Zeile = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 'Application.Caller ist der Name des Elements, dass das Makro aufgerufen hat
if Cells(Zeile, 2) > "" Then Sheets(Cells(Zeile, 2).value).Select
End Sub


das setzt voraus, dass das Label mit der linken oberen Ecke in der Zeile liegt, in der der Blattname hinterlegt ist.

am einfachsten jedoch der Vorschlag von Onur, wenn es ok ist einfach einen Doppelklick auf die Zelle, in der der Blattname steht, zu machen (also ganz ohne Labels)
dann reicht das im Modul des Tabellenblatts:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Column = 2 Then _
If Target.Row >= 5 Then _
If Target.Value > "" Then Sheets(Target.Value).Select
End Sub
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige