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

Code auf mehrere Button anwenden

Forumthread: Code auf mehrere Button anwenden

Code auf mehrere Button anwenden
10.05.2024 12:12:08
chris58
Hallo !
Ich habe einen Code der mir auf einer Liste in der Spalte 2 (B) den höchsten Wert anzeigt.
Gibt es die Möglichkeit das:
1. dieser Code für mehrere Buttons (also für Spalte 2 (B) - Spalte 5 (E) - Spalte 7 (G) - Spalte 9 (I)) den höchsten Wert anzeigt ohne für jeden Button den Code in ein Modul einzugeben und
2. das dann ein Sprung zu der Zeile erfolgt ?
Danke für Eure Hilfe
chris58

Hier der Code:
Sub tt()
Dim Spa As Long, MaxZeile As Long, MinZeile As Long
Spa = 2
MaxZeile = Application.Match(Application.Max(Columns(Spa)), Columns(Spa), 0)

Columns(Spa).Interior.ColorIndex = xlNone
Cells(MaxZeile, Spa).Interior.ColorIndex = 36

End Sub
Sub Farben()
Dim Zei As Long
For Zei = 1 To 10000
Cells(Zei, 1).Interior.ColorIndex = Zei
Next Zei
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Code auf mehrere Button anwenden
10.05.2024 13:24:13
ralf_b
woher soll denn der Code wissen welcher Button gerade gedrückt wurde, damit er dann die richtige Spalte nimmt?
Gibt es im Buttonnamen oder dessen Bezeichnung oder dessen Lage auf dem Blatt einen Hinweis?
Diese Dinge könnten dazu dienen die Spaltennummer zu ermitteln.
AW: Code auf mehrere Button anwenden
10.05.2024 15:15:05
Alwin Weisangler
Hallo,

bin mal einen ganz anderen Weg gegangen. So was kann man besser im Ribbon erschlagen.

ins Ribbon:


<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="rx_onLoad">
<ribbon startFromScratch="false">
<tabs>
<tab id="tab01" label="Dein Menü" insertBeforeMso="TabHome">
<group id="grpCBX_2021" label="Spaltenauswaahl" >
<checkBox id="cbx1" getLabel="Checkbox1_getLabel"
onAction="Checkbox1_onAction" />

<checkBox id="cbx2" getLabel="Checkbox2_getLabel"
onAction="Checkbox2_onAction" />

<checkBox id="cbx3" getLabel="Checkbox3_getLabel"
onAction="Checkbox3_onAction" />

<checkBox id="cbx4" getLabel="Checkbox4_getLabel"
onAction="Checkbox4_onAction" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

in ein allgemienes Modul:


Option Private Module
Public objRibbon As IRibbonUI, aktiv As Boolean

Public Sub rx_onload(ribbon As IRibbonUI)
Set objRibbon = ribbon
End Sub

' Spalte B
Public Sub Checkbox1_onAction(control As IRibbonControl, pressed As Boolean)
If pressed = True Then
aktiv = True
TT 2
objRibbon.Invalidate
Else
aktiv = False
delTT 2
objRibbon.Invalidate
End If
End Sub

Public Sub Checkbox1_getLabel(control As IRibbonControl, ByRef label)
If aktiv = True Then
label = "Spalte B höchster Wert aktiv"
Else
label = "Spalte B höchster Wert inaktiv"
End If
End Sub

' Spalte E
Public Sub Checkbox2_onAction(control As IRibbonControl, pressed As Boolean)
If pressed = True Then
aktiv = True
TT 5
objRibbon.Invalidate
Else
aktiv = False
delTT 5
objRibbon.Invalidate
End If
End Sub

Public Sub Checkbox2_getLabel(control As IRibbonControl, ByRef label)
If aktiv = True Then
label = "Spalte E höchster Wert aktiv"
Else
label = "Spalte E höchster Wert inaktiv"
End If
End Sub

' Spalte G
Public Sub Checkbox3_onAction(control As IRibbonControl, pressed As Boolean)
If pressed = True Then
aktiv = True
TT 7
objRibbon.Invalidate
Else
aktiv = False
delTT 7
objRibbon.Invalidate
End If
End Sub

Public Sub Checkbox3_getLabel(control As IRibbonControl, ByRef label)
If aktiv = True Then
label = "Spalte G höchster Wert aktiv"
Else
label = "Spalte G höchster Wert inaktiv"
End If
End Sub

' Spalte I
Public Sub Checkbox4_onAction(control As IRibbonControl, pressed As Boolean)
If pressed = True Then
aktiv = True
TT 9
objRibbon.Invalidate
Else
aktiv = False
delTT 9
objRibbon.Invalidate
End If
End Sub

Public Sub Checkbox4_getLabel(control As IRibbonControl, ByRef label)
If aktiv = True Then
label = "Spalte I höchster Wert aktiv"
Else
label = "Spalte I höchster Wert inaktiv"
End If
End Sub

Sub TT(Spa As Long)
Dim MaxZeile As Long, MinZeile As Long
MaxZeile = Application.Match(Application.Max(Columns(Spa)), Columns(Spa), 0)
Columns(Spa).Interior.ColorIndex = xlNone
Cells(MaxZeile, Spa).Interior.ColorIndex = 36
End Sub

Sub delTT(Spa As Long)
Columns(Spa).Interior.ColorIndex = xlNone
End Sub

https://www.herber.de/bbs/user/169385.xlsm

Gruß Uwe
Anzeige
AW: Code auf mehrere Button anwenden
10.05.2024 17:39:28
chris58
Hallo !
Ich habe das nun sop gemacht, das ich für jeweils einen Button ein Modul mit dem Code gemacht habe. Das funktioniert super............nur.........
ich muß auf der Liste und die wird jeden Tag länger (derzeit 6423 Zeilen) , die Zelle in der Spalte suchen, da mir der Code zwar die höchste Zahl farblich unterlegt, jedoch nicht dorthin springt, wo sich diese befindet. Hat da wer eine Ahnung, was ich einbauen kann, damit ich die Zelle "angesprochen" und in der Zeile 30 aufscheint ?
Damit wäre mir sehr geholfen ........danke
chris58
Anzeige
AW: Code auf mehrere Button anwenden
10.05.2024 20:25:19
chris58
Hallo an ALLE Helfer !
Ihr überfordert mich. Ich habe nun diesen Code gefunden. Wenn ich da noch in die gefundene Zelle eine gelbe Farbe hineinbekommen würde, wäre das wundervoll.
Dieser Code passt er sucht die größte Zahl in Spalte J und springt auch dorthin.
Danke - Danke - Danke
chris58

Hier der Code:

Sub huepf_hin()
Dim x As Long
With Application
x = .Match(.Max(Range("J:J")), Range("J:J"), 0)
Application.Goto Cells(x, "J")
End With
End Sub
Anzeige
AW: Code auf mehrere Button anwenden
11.05.2024 22:04:42
Piet
Hallo Chris

jetzt hast du ja einen gut funktionierenden Code von Ralf. Herzlichen Glückwunsch
Wenn du den für mehrer Spalten haben willst geht das am einfachsten über meinen Vorschlag.
Du musst nur wissen welche Endziffer jeder Button hat, dann kannst du mehrere Spalten zuweisen.
Im Code unten habe ich mal die Ziffern von 1 bis 4 genommen. Diese Zahlen musst du ggf. ändern.
Würde mich freuen wenn dir das auch noch weiterhilft.

mfg Piet

Sub Übersicht_Case_sortieren()

Dim Spa As String, Schfla As Variant
Dim x As Long, lz1 As Long, rng As Range
Schfla = Right(Application.Caller, 2)

Select Case Schfla
Case 1: Spa = "J"
Case 2: Spa = "K"
Case 3: Spa = "L"
Case 4: Spa = "M"
'usw.
End Select

With Application
lz1 = Cells(Rows.Count, Spa).End(xlUp).Row
Set rng = Range(Spa & "22:" & Spa & lz1)
x = .Match(.Max(rng), rng, 0)
Application.Goto rng.Cells(x), True
rng.Interior.ColorIndex = xlNone
rng.Cells(x).Interior.ColorIndex = 33
End With
End Sub
Anzeige
AW: Code auf mehrere Button anwenden
12.05.2024 08:19:06
chris58
Hallo Piet !
Danke, das Du Dir diese Mühe für mich gemacht hast. Ich werden den Code morgen probieren.
lg chris58
AW: Code auf mehrere Button anwenden
10.05.2024 22:35:20
ralf_b
den code hast du doch schon.
Columns(Spa).Interior.ColorIndex = xlNone

Cells(MaxZeile, Spa).Interior.ColorIndex = 36

nur ersetzen

Columns("J").Interior.ColorIndex = xlNone
Cells(x, "J").Interior.ColorIndex = 36
Anzeige
AW: Code auf mehrere Button anwenden
11.05.2024 08:36:19
chris58
Hallo !
Ich habe dank Euch nun den Code so wie ich ihn vorerst wollte. Nur jetzt ist das Problem aufgetaucht, das der Code erst ab Zeile J22 zu wirken beginnen soll.
Wie kann ich das eingeben, das der das macht. Sicher eine Kleinigkeit für Euch.
Ich habe "x = .Match(.Max(Range("J22:J65000")), Range("J22:J65000"), 0)" eingegeben, doch da kommt immer ein Fehler.
Danke
chris58

Sub huepf_hin()
Dim x As Long
With Application
x = .Match(.Max(Range("J:J")), Range("J:J"), 0)
Application.Goto Cells(x, "J")
Columns("J").Interior.ColorIndex = xlNone
Cells(x, "J").Interior.ColorIndex = 33
End With
End Sub
Anzeige
AW: Code auf mehrere Button anwenden
11.05.2024 08:37:01
chris58
Hallo !
Ich habe dank Euch nun den Code so wie ich ihn vorerst wollte. Nur jetzt ist das Problem aufgetaucht, das der Code erst ab Zeile J22 zu wirken beginnen soll.
Wie kann ich das eingeben, das der das macht. Sicher eine Kleinigkeit für Euch.
Ich habe "x = .Match(.Max(Range("J22:J65000")), Range("J22:J65000"), 0)" eingegeben, doch da kommt immer ein Fehler.
Danke
chris58

Sub huepf_hin()
Dim x As Long
With Application
x = .Match(.Max(Range("J:J")), Range("J:J"), 0)
Application.Goto Cells(x, "J")
Columns("J").Interior.ColorIndex = xlNone
Cells(x, "J").Interior.ColorIndex = 33
End With
End Sub
Anzeige
AW: Code auf mehrere Button anwenden
11.05.2024 08:50:13
Oberschlumpf
Hi,

und bitte WANN kommst DU auf die Idee, einfach mal eine Bsp-Datei VON DIR hier upzuloaden???????
Bis jetzt ist das alles hier zwar gute, aber eben NUR gute Raterei!

Chris, oder wie auch immer du heißt, du bist doch nich erst seit gestern hier. Wieso zeigst du nich gleich immer in deiner Startfrage eine Bsp-Datei per Upload?

Ciao
Anzeige
AW: Code auf mehrere Button anwenden
11.05.2024 08:53:32
ralf_b
Sub huepf_hin()

Dim x As Long, lz1 As Long, rng As Range
With Application
lz1 = Cells(Rows.Count, "J").End(xlUp).Row
Set rng = Range("J22:J" & lz1)
x = .Match(.Max(rng), rng, 0)
Application.Goto rng.Cells(x), True
rng.Interior.ColorIndex = xlNone
rng.Cells(x).Interior.ColorIndex = 33
End With
End Sub
Anzeige
AW: Code auf mehrere Button anwenden
11.05.2024 15:11:49
chris58
Hallo !
Danke für die Hilfe und für den Code. Eine kleine Korrektur habe ich noch gemacht, da Spalte J anstatt Spalte A (darin steht das Datum) bei der Suche auf dem ganz linken Rand aufschien. Ich habe nunmehr einen Sprung nach links eingebaut (pplication.Run "'Berechnung Strom.xls'!Retour").
Das geht nun wunderbar, so wie ich es wollte. Herzlichen Dank an ralf_b für die Finalisierung des Codes.
Auch an alle anderen ein herzliches Danke.

An den User Oberschlumpf: Ja, du hast recht, man sollte eine BSP-Datei hochladen. Doch ich dachte es ist was ganz einfaches (zumindest für Euch hier) und ich müßte dazu die Datei die derzeit 3.365 KB hat gehörig abspecken, dann in eine ZP-Datei packen. Ich habe das schon öfter gemacht und diese Datei hochgeladen, doch ich habe diese dann immer wieder verändert, sodaß, falls ich die alte Version finde, diese nicht zusammenpasst. Verzeihung, das ich keine BSP-Datei genommen habe.
Ich wünsche noch Allen ein schönes Wochenende
lg chris58
Anzeige
AW: Code auf mehrere Button anwenden
10.05.2024 18:18:25
schauan
Hallöchen,

schaue Dir z.B. mal die Möglichkeiten von Application.Goto an.
AW: Code auf mehrere Button anwenden
10.05.2024 20:05:23
Piet
Hallo

das ist ein normaler Sortiercode für eine private Übersicht Tabelle mit 10 Spalten von mir.
Alle 10 Button über ein einziges Makro gesteuert! Ausgewertet wird die 2stellige End-Nummer!
Statt Zell Adressen könntest du auch Spalten für deine Auswertung angeben. Hilft dir das weiter??

mfg Piet

Sub Übersicht_Case_sortieren()

Dim Adr1 As String, Schfla, lz1 As Long
Schfla = Right(Application.Caller, 2)
lz1 = Cells(Rows.Count, 3).End(xlUp).Row
If lz1 7 Then Exit Sub

Select Case Schfla
Case 1: Adr1 = "A8"
Case 2: Adr1 = "B8"
Case 3: Adr1 = "C8"
Case 4: Adr1 = "D8"
Case 5: Adr1 = "E8"
Case 6: Adr1 = "F8"
Case 7: Adr1 = "G8"
Case 8: Adr1 = "H8"
Case 9: Adr1 = "I8"
Case 10: Adr1 = "J8"
End Select

Range("A8:J" & lz1).Sort Key1:=Range(Adr1), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ActiveWindow.ScrollRow = 1
End Sub
Anzeige
AW: Code auf mehrere Button anwenden
10.05.2024 14:25:10
chris58
Hallo !
Geht zumindest das man dem Code sagen kann, das er in Zeile springt und diese auf dem Blatt im Sichtfenster ist ?
Der Buttonname ist Schaltfläche 155 - hilft sowas ?
lg chris58
AW: Code auf mehrere Button anwenden
10.05.2024 16:50:10
schauan
Hallöchen,

so wie es ausschaut, nimmst Du Formular-Buttons. Welcher da gedrückt wurde, kann man mit Application.Caller abfragen.
Entsprechend kannst Du allen Buttons das eine Makro zuweisen und darin anhand Aplication.Caller eine Fallunterscheidung z.B. für die Spalten treffen.
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige