Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1552to1556
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

VBA Nach Auswahl nicht aktualisiert

VBA Nach Auswahl nicht aktualisiert
02.05.2017 19:25:32
Peer
Hallo.
Ich versuche mich gerade in VBA.
Nun möchte ich in einer Zelle C10 einen Text eingeben und wenn ich z.B. "Krank" hineinschreibe soll in Zelle R10 "ausruhen" stehen.
Wenn in C10 "Urlaub" steht, dann soll in R10 "Reise" stehen.
Ich habe mir gedacht (ich möchte es gern mit VBA probieren), dies mit einer Case Select Anweisung zu realisieren.
Wenn ich jetzt mit dem Debugger per Einzelschritt den Code durchzippe, funktioniert es auch (wenn auch wie ein Anfänger geschrieben).
Aber im Benutzermodus passiert bei R12 nichts, wenn ich die C10 geändert habe.
Woran kann es liegen? Muss ich noch eine "Refresh" Anweisung eingeben?
Ich überlasse hier mal den (miserablen) Code.
Public Sub Verwendung()
Dim wks As Worksheet
Set wks = ThisWorkbook.Worksheets("Januar")
With wks
Select Case .Range("C10").Value
Case Is = "Krank"
.Range("R10").Interior.ColorIndex = 4
.Range("R10").Value = "Ausruhen"
Case Is = "Urlaub"
.Range("R10").Font.ColorIndex = 15
.Range("R10").Value = "Reise"
'Case Is = 3
'.Range("C10").Value = ""
'.Range("C10").Interior.ColorIndex = xlNone
End Select
.Range("R10").Calculate
End With
'Set wks = Nothing
End Sub
Vielen Dank im Voraus.
Peer

31
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Nach Auswahl nicht aktualisiert
02.05.2017 19:31:21
Hajo_Zi
Hallo Peter,
Du musst das Ereignis

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$10" Then
' Dein Code
End If
End Sub

starte den VBA Editor (Alt+F11), Bild sollte zweigeteilt sein ansonsten Strg+R, Doppelklick auf Deine Datei, Doppelklick auf Deine Tabelle, Code ins rechte Fenster kopieren, VBA Editor schließen.
Das Makro wird automatisch gestartet.
Der Code wirkt nur in dieser Tabelle.

AW: VBA Nach Auswahl nicht aktualisiert
02.05.2017 19:42:27
Peer
Hallo Hajo.
Ich bekomme es nicht hin.
Meinst du so?
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$10" Then
Dim wks As Worksheet
Set wks = ThisWorkbook.Worksheets("Januar")
With wks
Select Case .Range("C10").Value
Case Is = "Krank"
.Range("R10").Interior.ColorIndex = 4
.Range("R10").Value = "Ausruhen"
Case Is = "Urlaub"
.Range("R10").Font.ColorIndex = 15
.Range("R10").Value = "Reise"
'Case Is = 3
'.Range("C10").Value = ""
'.Range("C10").Interior.ColorIndex = xlNone
End Select
.Range("R10").Calculate
End With
'Set wks = Nothing
End If
End Sub

Anzeige
AW: VBA Nach Auswahl nicht aktualisiert
02.05.2017 19:51:34
Werner
Hallo Peer,
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$10" Then
Select Case Range("C10").Value
Case "Krank"
Range("R10").Interior.ColorIndex = 4
Range("R10").Value = "Ausruhen"
Case "Urlaub"
Range("R10").Font.ColorIndex = 15
Range("R10").Value = "Reise"
Case 3
Range("R10").Value = ""
Range("R10").Interior.ColorIndex = xlNone
End Select
Range("R10").Calculate
End If
End Sub
Gruß Werner
da war ich zu schnell, ohne zu Denken ;-) Logo owT
02.05.2017 19:55:21
Matthias
AW: da war ich zu schnell, ohne zu Denken ;-) Logo owT
02.05.2017 20:07:05
Peer
Hallo Werner.
Klappt nicht.
Ich habe deinen Code komplett übertragen in den VBA-Editor und den Editor anschließend geschlossen.
Ich habe die Makrosicherheit auf "Alle Makros mit Benachrichtigung" gestellt, damit ich eine Warnung vorher bekomme, bevor ich Dateien mit Makros öffne.
Liegt es daran?
https://www.herber.de/bbs/user/113252.xlsm
LG
Peer
Anzeige
AW: da war ich zu schnell, ohne zu Denken ;-) Logo owT
02.05.2017 20:25:53
Werner
Hallo Peer,
du hast den Code auch im Codemodul des Arbeitsblattes, auf dem er sich auswirken soll?
Rechtsklick auf den Tab-Reiter - Code anzeigen - Code rechts ins Codefenster kopieren.
Gruß Werner
allerdings wäre auch Case Else angebracht owT
02.05.2017 20:30:14
Matthias
AW: da war ich zu schnell, ohne zu Denken ;-) Logo owT
05.05.2017 18:34:28
Peer
Hallo.
https://www.herber.de/bbs/user/113252.xlsm
Ich arbeite/bastle weiter an meiner Datei und meinem Verständnis.
Nun möchte ich gern, wenn ich CheckBox1 aktiviere, sollen die darüber liegenden Werte (hier D10:D40) die Font-Farbe weiß bekommen (weil unsichtbar) einschließlich die Summe von diese Werten (hier D41), diese sollte ebenfalls "verschwinden".
Wenn der Haken wieder entfernt wird, sollen alle Werte wieder sichtbar sein (einschließlich der Summe).
Hintergrund ist der, das man selbst entscheiden soll, ob man bei einem späteren Ausdruck dieser Tabelle, die Werte der Spalte haben will oder nicht.
Desweiteren sollte, wenn D41 den Wert 0 (Null) hat, D41 ebenfalls weiß bzw. leer sein, also keinen Wert darstellen.
Hier versuche ich mich am Code, der aber mich entweder mit Missachtung oder Zickerei, sprich Fehlermeldung, straft.
Option Explicit
Private Sub CheckBox1_Click(ByVal Target As Range)
With ActiveSheet
If CheckBox1.Value = True Then
'    .Unprotect
'        If Cells(41, 3).Value = 0 Then
'            Cells(41, 3).Font.ColorIndex = 2
'        ElseIf CheckBox1.Value = True And Cells(41, 3).Value > 0 Then
Target.Range("D10:D41").Font.ColorIndex = 3
Else
Target.Range("D10:D41").Font.ColorIndex = 1
'        End If
'    .Protect
End If
End With
End Sub
Falscher Ansatz oder keine Ahnung?
LG
Peer
Anzeige
AW: da war ich zu schnell, ohne zu Denken ;-) Logo owT
07.05.2017 09:13:47
Werner
Hallo Peer,
sorry, aber jetzt verwirrst du mich dann doch etwas. Ich dachte du wolltest eine CheckBox durch die die kompletten Werte aus- bzw. eingeblendet werden.
Jetzt kommt in deinem Codebeispiel plötzlich noch Rot ins Spiel.
Dein Code:
-Wenn Wert in C41 = 0 dann Schriftfarbe weiß (brauchts du nicht, kannst du über die Summenformel regeln)
-Wenn CheckBox geklickt und Wert in C41 kleiner 0, dann D10 bis D41 in Rot (da wird aber nix ausgeblendet)
-Ansonsten (wenn CheckBox nicht aktiviert) dann Schriftfarbe schwarz
Wo wird da jetzt etwas ausgeblendet?
So eine CheckBox hat zwei Zustände, ausgewählt oder nicht ausgewählt. Ich würde da jetzt nicht noch verschiedene Prüfungen drauf legen. Du bezeichnest ja die CheckBox auch z.B. mit Ein-/Ausblenden oder ähnlich. Wenn da dann noch ein ...aber nur wenn oder wenn nicht dahinter steckt, dann ist das nicht unbedingt bedienerfreundlich.
Das ist aber natürlich nur meine persönliche Meinung.
Hier mal der Code für eine CheckBox die nichts anderes macht wie ausblenden und einblenden. Die Beschriftung der CheckBox ändert sich je nach Zustand.
Option Explicit
Private Sub CheckBox1_Click()
With Worksheets("Tabelle1")
If .CheckBox1 = True Then
.Range(.Cells(10, 4), .Cells(41, 4)).Font.ColorIndex = 2
.Cells(41, 3).Font.ColorIndex = 2
.CheckBox1.Caption = "Einblenden"
Else
.Range(.Cells(10, 4), .Cells(41, 4)).Font.ColorIndex = 1
.Cells(41, 3).Font.ColorIndex = 1
.CheckBox1.Caption = "Ausblenden"
End If
End With
End Sub
Gruß Werner
Anzeige
AW: da war ich zu schnell, ohne zu Denken ;-) Logo owT
07.05.2017 11:39:41
Peer
Hallo Werner.
Danke für deine Rückmeldung.
Ich wollte dich nicht verwirren. Sorry. ;-)
Ich habe am Beispiel nur rot gewählt, um die Reaktionen des Codes besser zu sehen. Weiß war dafür eher schlecht gewählt. Am Ende, wenn alles läuft und ich es verstanden habe, hätte ich dann rot mit weiß getauscht.
Inzwischen habe ich vielleicht den Grund erahnt.
Ich hatte die Vermutung, das der Blattschutz das Problem war und habe daher ihn im Code mit einbezogen.
War es sinnvoll oder nötig?
Hier mein jetziger Code, der bis jetzt macht, was er soll.
Private Sub CheckBox1_Click()
Dim Target As Range
Set Target = Range("D10:D41")
With ActiveSheet
If CheckBox1.Value = True Then
.Unprotect
Target.Font.ColorIndex = 2
.Protect
Else
.Unprotect
Target.Font.ColorIndex = 1
.Protect
End If
End With
End Sub
Deine Meinung dazu wäre mir sehr wichtig, da ich als Neuling vile Feedback benötige.
Zu deinem Code hätte ich noch ein Verständnis-Frage.
.Range(.Cells(10, 4), .Cells(41, 4) bedeutet, erklärt für einen Newbie?
LG
Peer
Anzeige
AW: da war ich zu schnell, ohne zu Denken ;-) Logo owT
07.05.2017 12:00:08
Werner
Hallo Peer,
1. Target ist ein VBA Schlüsselwort, würde ich nicht als Name für eine Variable verwenden
2. Die Set - Anweisung nach dem With ActiveSheet, dann aber zwingend mit einem Punkt vor Range, damit ist sichergestellt, dass auch sauber auf das ActiveSheet referenziert ist
3. Unprotect und Protect außerhalb von If - End If, dann braucht es das nur einmal
Private Sub CheckBox1_Click()
Dim Bereich As Range
With ActiveSheet
Set Bereich = .Range("D10:D41")
.Unprotect
If CheckBox1.Value = True Then
Bereich.Font.ColorIndex = 2
CheckBox1.Caption = "Einblenden"
Else
Bereich.Font.ColorIndex = 1
CheckBox1.Caption = "Ausblenden"
End If
.Protect
End With
End Sub
Hast du keine Beschriftung für deine CheckBox? Ich ändere im Code die Beschriftung der CheckBox, ist aber nur eine Spielerei.
.Range(.Cells(10=Zeile, 4=Spalte, .Cells(41=Zeile, 4=Spalte)) = D10:D41
Gruß Werner
Anzeige
AW: da war ich zu schnell, ohne zu Denken ;-) Logo owT
07.05.2017 12:20:17
Peer
Vielen Dank, Werner.
Ich hatte bis jetzt das Caption herausgelassen, weil ich weitere Checkboxen in der Zelle einfügen wollte und mir der Platz dazu fehlte.
Aber eine Art MouseOver über der Checkbox, der den den Zweck des Klicken anzeigen sollte, hier zum Bespiel "Art 161 anzeigen" oder "Art 161 drucken", wäre vielleicht noch hilfreich.
Geht das zu Verwirklichen?
Gruß
Peer
AW: da war ich zu schnell, ohne zu Denken ;-) Logo owT
06.05.2017 16:28:00
Werner
Hallo Peer,
keine 0 in der Summenzelle kannst du doch mit der Formel händeln:
=WENN(SUMME(D10:D40)=0;"";SUMME(D10:D40))
Das andere Problem kann ich mir im Moment leider nicht anschauen, bin arbeiten und kann hier nichts herunterladen. Bei mir frühestens am Montag, ansonsten müsstest du den Beitrag wieder auf offen stellen.
Gruß Werner
Anzeige
AW: da war ich zu schnell, ohne zu Denken ;-) Logo owT
06.05.2017 19:49:22
Peer
Hallo Werner.
Ich habe nun den Thread wieder offen gestellt und frage die restliche Excel-Gemeinde, ob sie einen Tipp haben.
LG
Peer
Code gehört ins entsprechende Blatt!
02.05.2017 19:51:57
Matthias
Hallo

Set wks = ThisWorkbook.ActiveSheet
Gruß Matthias
AW: Code gehört ins entsprechende Blatt!
02.05.2017 20:43:34
Peer
Hallo.
Vielen Dank.
Dies war das Problem.
Der Code war als Modul im Ordner "Module" des VBA-Editors hinterlegt.
Hier nochmal den vollständigen richtigen Code:

Private Sub Worksheet_Change(ByVal Target As Range)
Set wks = ThisWorkbook.ActiveSheet
If Target.Address = "$C$10" Then
Select Case Range("C10").Value
Case "Krank"
Range("R10").Interior.ColorIndex = 4
Range("R10").Value = "Ausruhen"
Case "Urlaub"
Range("R10").Font.ColorIndex = 15
Range("R10").Value = "Reise"
Case 3
Range("R10").Value = ""
Range("R10").Interior.ColorIndex = xlNone
End Select
Range("R10").Calculate
End If
End Sub
Ich möchte langsam meine Arbeit dahin bringen, dass nicht mehr nur C10 und R10 den Code ausführen, sondern z.B. Range C10:C40 mit "Krank" bzw. Urlaub in den dazu gehörigen Zeilen (Range R10:R40) darauf reagieren.
Desweiteren ist beabsichtigt, dass es nicht nur auf ein Sheet auswirkt, sondern auf mehrere Sheets (hier speziell von die Reiter "Januar" bis "Dezember".
Nochmals vielen Dank für eure Hilfe, Werner und Matthias.
LG
Anzeige
AW: Code gehört ins entsprechende Blatt!
02.05.2017 21:47:11
Werner
Hallo Peer,
hier mal der Code für den Bereich C10:C40
Code müsste dann in jedes Blatt auf dem er sich auswirken soll
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column  3 Then Exit Sub 'wirkt nur in Spalte 3 = C
If Target.Row >= 10 And Target.Row 
Gruß Werner
AW: Code gehört ins entsprechende Blatt!
03.05.2017 03:12:15
Werner
Hallo Peer,
du könntest natürlich den eigentlichen Code auch in ein allgemeines Modul auslagern:
Option Explicit
Public Sub Test(Target As Range)
With ActiveSheet
If Target.Column  3 Then Exit Sub
If Target.Row >= 10 And Target.Row 
Und in die einzelnen Blätter dann nur noch den Aufruf des Moduls rein:
Private Sub Worksheet_Change(ByVal Target As Range)
Call Test(Target)
End Sub
Gruß Werner
Anzeige
AW: Code gehört ins entsprechende Blatt!
04.05.2017 17:39:31
Peer
Hallo.
Vielen Dank euch beiden.
Die Lösung ist ja sehr gelungen. Ich wollte schon danach fragen, wie man es einfacher machen kann.
Aber die Zeilen...
Target.Offset(, 15).Interior.ColorIndex = xlNone
Target.Offset(, 15).Font.ColorIndex = 0
...werde vom Debugger bemängelt.
Warum?
LG
Peer
Bei mir nicht.
04.05.2017 18:30:34
Werner
Hallo Peer,
dann lad mal eine Beispielmappe hoch, in der es nicht funktioniert, bei mir läuft das problemlos.
Gruß Werner
AW: Bei mir nicht.
04.05.2017 19:10:02
Peer
Hallo Werner.
https://www.herber.de/bbs/user/113320.xlsm
Da ist noch ein Versuch dabei, die Zellen M10:P10 zu sperren, damit man keine Eingaben mehr kann, wenn "krank" ausgewählt wurde. Funktioniert aber (noch) nicht.
Gruß
Peer
AW: Bei mir nicht.
04.05.2017 20:07:46
Werner
Hallo Peer,
kann ja auch nicht gehen, wenn du einen Blattschutz drauf hast. Ich hab das Makro jetzt angepasst. Am Anfang wird der Blattschutz raus und am Ende wieder rein gemacht. Das mit dem Zellschutz ist auch drin. Wenn das krank wieder gelöscht wird, dann wird der Zellschutz wieder entfernt -wenn das so nicht sein soll mußt du die Codezeile halt löschen-.
Option Explicit
Public Sub Test(Target As Range)
With ActiveSheet
If Target.Column  3 Then Exit Sub
If Target.Row >= 10 And Target.Row 
Gruß Werner
AW: Bei mir nicht.
04.05.2017 20:47:23
Peer
Hallo Werber.
Danke für deine Mühe.
Aber ich kann in der Zelle weiterhin einen Wert eingeben (Offset 10 = Spalte M). Beabsichtigt ist, das man in die Zelle erst gar nicht klicken kann und folglich auch keinen Wert eingeben kann.
"Target.Offset(, 10).Resize(, 4).Locked = True" bedeutet doch Spalte 10 und weitere 3 (um 4 Spalten erweitert) 'Zellschutz rein?
LG
Peer
AW: Bei mir nicht.
04.05.2017 21:12:15
Werner
Hallo Peer,
dazu muss aber der Blattschutz gesetzt sein. Hast du den Code ohne Änderungen in deiner Datei am laufen?
Gruß Werner
AW: Bei mir nicht.
04.05.2017 21:37:05
Peer
Hi Werner.
Der Blattschutz war zwar aktiv, aber ich habe ihn nochmals aus- und eingeschaltet.
Jetzt bekomme ich eine Standard-Fehlermeldung.
Danke hierfür.
Wie kann ich erreichen, das ich einen Klick gar nicht erst ausführen kann? Also die Zelle(n) gar nicht fokussieren kann und eventuell einen Pieps bekomme?
LG
Peer
AW: Bei mir nicht.
04.05.2017 21:43:21
Peer
Ich glaube, ich habe es herausbekommen.
Im Blattschutz war noch der Haken in "Gesperrte Zellen auswählen" gesetzt.
Jetzt ist er raus und es geht.
Aber warum jetzt nur in Zeile 10?
Option Explicit
Public Sub Test(Target As Range)
With ActiveSheet
If Target.Column  3 Then Exit Sub
'ab Zeile (row) 10 und bis Zeile 40
If Target.Row >= 10 And Target.Row 

AW: Bei mir nicht.
04.05.2017 21:45:44
Werner
Hallo Peer,
mach mal den Blattschutz raus. Wenn du ihn jetzt wieder rein machst kannst du unter anderem auch auswählen, dass gesperrte Zellen nicht ausgewählt werden können, da muss ein Haken rein.
Gruß Werner
AW: Bei mir nicht.
04.05.2017 21:50:59
Peer
Hallo Werner.
Überschneidung der Gedanken... ;-)
Ich habe das ganze File geschlossen und neu gestartet.
Jetzt funktioniert erstmal alles, was ich heute erreichen wollte.
Vielen Dank nochmals, Werner.
Gute Nacht
LG
Peer
Gerne u. Danke für die Rückmeldung.
04.05.2017 21:52:55
Werner
Hallo Peer,
...und noch viel Spaß beim weiter basteln.
Gruß Werner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige