Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1852to1856
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Command Button auf mehreren Sheets

Command Button auf mehreren Sheets
08.11.2021 18:32:39
Daniel
Liebes Forum,
seit Monaten ziehe ich aus diesem tollen Forum für meine beruflichen Zwecke viel Wissen und Erfahrung. Ich habe ein Excel-Tool erstellt, welches die Arbeits- und Planungsgrundlage für ca. 20 Fachkräfte darstellt. Erfasst wird der Bedarf für psychologische Tests in unterschiedlichen Reha-Maßnahmen dutzender Patienten (x = Testbedarf; p=Test in Planung; e=Test erledigt). Momentan habe ich folgendes Problem: In Spalte A der Tabelle kann der Status des Patienten geändert werden: Es erscheint beim Anwählen des Namens (Spalte A oder B) ein kleiner dynamischer Button mit "?", der bei Click abfragt, ob der Patient aus dem Register markiert und die geplanten Testeinträge entfernt werden sollen (rot, kursiv, durchgestrichen; e + p werden entfernt). Das klappt auf Tabelle1 wunderbar.
Sobald ich diese Prozedur als Code auf andere Tabellenblätter übertrage, kommen Laufzeitfehler. Ich habe bereits versucht, den CommandButton durch mehrere Nummern abweichend zu benennen, aber es bringt nichts. Ich bitte daher um Eure Mithilfe. Was übersehe ich? Was fehlt da? Hier der Code:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A5:B1000")) Is Nothing Then
With ActiveSheet
With .CommandButton1
.Caption = "?"
.Top = 1: .Left = 1
.Width = 22: .Height = 21
.BackColor = 255
.Font.Name = "Arial"
.Font.Size = 11
End With
End With
ActiveSheet.CommandButton1.Visible = True
ActiveSheet.CommandButton1.Top = Cells(ActiveCell.Row, 1).Top
ActiveSheet.CommandButton1.Left = Cells(ActiveCell.Row, 1).Left
Else
ActiveSheet.CommandButton1.Visible = False
End If
End Sub
Private Sub CommandButton1_Click()
Dim rngZelle As Range
Dim MyRow&
MyRow = ActiveCell.Row
If MsgBox("Teilnehmer(in) dauerhaft als beendet markieren?" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Achtung:" & Chr(13) & Chr(10) & "- alle vorgesehenen (x) und geplanten (p) Tests werden entfernt" & Chr(13) & Chr(10) & "- erfolgte Tests bleiben erfasst", vbYesNoCancel) = vbYes Then
Range("A" & ActiveCell.Row & ":" & "C" & ActiveCell.Row).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("A" & ActiveCell.Row & ":" & "I" & ActiveCell.Row).Select
With Selection.Font
.Strikethrough = True
.Italic = True
End With
Range("J" & ActiveCell.Row & ":" & "Z" & ActiveCell.Row).Select
With Selection
.Replace What:="x", Replacement:=""
.Replace What:="p", Replacement:=""
End With
Else
End If
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Command Button auf mehreren Sheets
08.11.2021 18:39:20
{Boris}
Hi,
lad mal Deine Mappe hoch. Hast Du den Code auch jeweils in das entsprechende Codemodul der anderen Tabellen eingefügt?
Grundsätzlich kann man den Code auch für alle Tabellenblätter nutzbar machen, wenn man ihn im Codemodul "DieseArbeitsmappe" einfügt unter dem mappenweiten Ereignis Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) - das hat Sh als zusätzliche Variable für das jeweilige Tabellenblatt.
VG, Boris
AW: Command Button auf mehreren Sheets
08.11.2021 18:58:41
Daniel
Hi Boris,
anbei meine Datei: https://www.herber.de/bbs/user/149009.xlsm
Vielleicht fällt es Dir ja sofort ins Auge ...
LG Daniel
Anzeige
AW: Command Button auf mehreren Sheets
08.11.2021 19:45:47
{Boris}
Hi,
in Deinem anderen Blatt ist schlicht kein Commandbutton vorhanden - und daher kommt es natürlich zum Fehler.
Teste mal (in das Codemodul des entsprechenden Tabellenblattes) - im Blatt....BVB wird der Button gefunden, im Blatt ...AE nicht.

Sub ist_er_da()
Dim obj As Object
For Each obj In Me.OLEObjects
MsgBox obj.Name
Next obj
End Sub
VG, Boris
AW: Command Button auf mehreren Sheets
08.11.2021 20:04:58
Daniel
Hi Boris,
danke für die schnelle Hilfe. Es erscheint nichts mit Deinem Check-Code - was zu erwarten war. Ich habe den CommandButtoon im ersten Blatt nicht händisch angelegt, da er ja in Abhängigkeit der Zellen-Auswahl dynamisch erscheinen muss. Was muss ich tun, damit er das überall macht?
LG Daniel
Anzeige
AW: Command Button auf mehreren Sheets
08.11.2021 20:09:59
{Boris}
Hi Daniel,
Du musst nur in jedem Blatt einen CommandButton anlegen. Am Einfachsten: Kopiere den bestehenden Commandbutton mit Strg+C (im Entwurfsmodus) und füge ihn in die anderen Blätter mit Strg + V ein.
VG, Boris
AW: Command Button auf mehreren Sheets
08.11.2021 20:47:05
Daniel
Hi Boris,
das war der Knackpunkt! Jetzt funktioniert alles auf allen Blättern. Vielen Dank dafür!
Jetzt mache ich mich an das Fine-Tuning (siehe Tipp zur Verschlankung ohne Select ... )
LG Daniel
AW: Command Button auf mehreren Sheets
08.11.2021 18:59:46
Daniel
Hi
Es sollte nichts dagegen sprechen, dies auf mehreren Tabellenblättern zu verwenden.
Du kannst den Code 1:1 vom Modul des einen Blattes ins Modul des anderen Blattes kopieren.
Allerdings muss das Blatt vorher schon einen Commandbutton haben und dieser muss genauso benannt sein wie im Ausgangsblatt.
Auch solltest du im Code nicht selektieren, weil du damit wieder das SelectionChange-Event auslöst, was sicherlich unerwünscht.
Bau mal deinen Code nach diesem Schema um und mach aus:

Range("A" & ActiveCell.Row & ":" & "C" & ActiveCell.Row).Select
With Selection.Interior
Diese eine Zeile:

With Range("A" & ActiveCell.Row & ":" & "C" & ActiveCell.Row).Interior
Also überall dort, wo du zwei Zeilen nach dem Schema hast
Zellbereich.SELECT
SELECTION.xxx
Ersetzt du das SELECTION durch den Zellbereich und sparst die Zeile mir .Select.
Das Selection-Gedöns zeichnet der Recorder auf, weil wir so mit der Maus arbeiten, aber in VBA braucht man das nicht, hier kann man den Befehl direkt ans Objekt hängen, ohne es vorher zu selektieren.
Gruß Daniel
Anzeige
AW: Command Button auf mehreren Sheets
08.11.2021 20:49:45
Daniel
Hi Daniel,
die gute Nachricht zuerst: das Grundsatzproblem konnte ich mit Boris Hilfe lösen; es läuft jetzt auf allen Blättern. Deinen Verschlankungsvorschlag habe ich noch nicht zum Laufen gebracht, weil er offenbar andere Befehle für die Formatierung erwartet. Er meckert immer rum, sobald ich die selection weglasse ...
LG Daniel
So'n kleiner Tipp...
08.11.2021 21:04:32
{Boris}
Hi Daniel,
bleib bei Deinem Benutzernamen doch bei Daniel Jäger oder Daniel xyz oder so, damit man später nicht nen Thread hat, der nur aus Daniels besteht ;-)
VG, Boris
AW: Command Button auf mehreren Sheets
08.11.2021 21:21:50
ralf_b
viellecht erklärst (zeigst) du mal was du so umgebaut hast.
dann würde "Er meckert immer rum, sobald ich die selection weglasse" für Andere auch einen Sinn ergeben.
Anzeige
AW: Command Button auf mehreren Sheets
08.11.2021 21:32:04
Daniel
Habe den Tipp befolgt und die Selection rausgenommen. Ab dem Passus mit Strikethrough erwartet Interior offenbar eine andere Syntax als vorher der Selection Befehl ... der Replace funktioniert auch nicht mehr ...

Private Sub CommandButton1_Click()
Dim MyRow&
MyRow = ActiveCell.Row
If MsgBox("Teilnehmer(in) dauerhaft als beendet markieren?" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Achtung:" & Chr(13) & Chr(10) & "- alle vorgesehenen (x) und geplanten (p) Tests werden entfernt" & Chr(13) & Chr(10) & "- erfolgte Tests bleiben erfasst", vbYesNoCancel) = vbYes Then
Application.EnableEvents = False
With Range("A" & ActiveCell.Row & ":" & "C" & ActiveCell.Row).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Range("A" & ActiveCell.Row & ":" & "I" & ActiveCell.Row).Interior
.Strikethrough = True
.Italic = True
End With
With Range("J" & ActiveCell.Row & ":" & "Z" & ActiveCell.Row).Interior
.Replace What:="x", Replacement:=""
.Replace What:="p", Replacement:=""
End With
Else
End If
Application.EnableEvents = True
End Sub

Anzeige
AW: Command Button auf mehreren Sheets
08.11.2021 21:44:35
ralf_b
siehste, schon wirds klarer. nicht alle Eigenschaften gehören in das Interior-objekt.

With Range("A" & ActiveCell.Row & ":" & "I" & ActiveCell.Row).Font
.Strikethrough = True
.Italic = True
End With
With Range("J" & ActiveCell.Row & ":" & "Z" & ActiveCell.Row)  '  hier nur die range als Bezug
.Replace What:="x", Replacement:=""
.Replace What:="p", Replacement:=""
End With

AW: Command Button auf mehreren Sheets
08.11.2021 22:49:00
Daniel
Aha, wieder etwas gelernt! Danke, jetzt klappt es und sogar merklich schneller. Vielen Dank!
Wie kann ich den replace Befehl nutzen, um Platzhalter beliiebig zu überschreiben? Ungefähr so:

With Range("J" & ActiveCell.Row & ":" & "Z" & ActiveCell.Row).Interior
.Replace What:=" egal was in der zelle schon steht ", Replacement:=" XYZ neu "
End With
Sternchen funktioniert nicht ... aber ist wohl auch ein naiver Ansatz ...
LG Daniel Jäger
Anzeige
AW: Command Button auf mehreren Sheets
08.11.2021 23:32:32
Daniel
Das .Interior steht für die formatierung der innenfarbe der Zelle.
Das ist quasi die Tapete in deinem Zimmer!
Wenn du in deinem Zimmer selbst was ändern willst, darfst du nicht die Tapete ansprechen sondern das Zimmer selbst.
Lass also das .Interior weg.
Gruß Daniel
AW: Command Button auf mehreren Sheets
08.11.2021 23:46:31
Daniel
... ja, habe es auch gemerkt und nun eine Lösung über Value gefunden, womit ich die Zelle einfach mit meinem Wunsch-Replace überschreibe.

Range("AD" & ActiveCell.Row & ":" & "AD" & ActiveCell.Row).Value = "Therapie beendet"
Nochmal 1000 Dank und gute Nacht.
-thread closed-
Lg Daniel Jäger
Anzeige
AW: Command Button auf mehreren Sheets
08.11.2021 22:00:34
Daniel
Naja und das was nach dem "Selection" kommt, nämlich der Befehel oder die Eigenschaft die du ansprechen willst, musst du natürlich so belassen, wie sie vorher war.
Ich sprach nur davon, dass "Selection" gegen das "Range(...)" auszutauschen.
Was danach kommt, muss natürlich so bleiben, wie es vorher war.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige