Registriert seit: 16.10.2020
Version(en): 2016
Moin,
mal eine Verständnisfrage.
Ich suche in einer Tabelle nach einem bestimmten Wort und kann z. B. alle Zellen mit dem entsprechenden Wort z. B. färben.
Warum kann ich nicht mit der gleichen Methode alle diese Zellen aktivieren?
Mit "zelle.activate" wird nur die letzte Zelle in der Zeile mit dem entsprechenden Wort markiert.
Wo ist mein Gedankenfehler???
Code:
With Sheets("Kalender")
Set Bereich = Range("H4:NN4")
For Each zelle In Bereich
If zelle.Value = "Start" Then zelle.Activate
'If zelle.Value = "Start" Then zelle .Interior.ColorIndex = 15
Next zelle
End With
Gruß
Björn
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Moin!
Nun ja, es kann halt immer nur eine einzige Zelle (auch in einer Mehrfach-Selektion) aktiv sein.
Du könntest den Bereich mittels Union() zusammensetzen.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo
ich würde es wie unten programmieren. Bitte nicht vergessen den Bereich vorher von Innenfarbe zu löschen!
Das bei deinem Makro nur die letzte Zelle aktiviert ist, sollte dir schon klar sein. Oder?? Ich erkläre es.
Wenn du nach zelle.Activate eine Msgbox einsetzt, siehst du das immer nur eine Zelle aktiviert wird!
Das kostet aber unnötig Zeit, wir schalten deshalb den Bildschirmaufbau lieber ab. So gehts schneller!
Wenn du alle Zellen aktivieren willst könnte es über Union gehen. Damit kenne ich mich aber nicht aus!
mfg Gast 123
Code:
With Sheets("Kalender")
Set Bereich = Range("H4:NN4")
Bereich.Interior.ColorIndex = xlNone
Application.ScreenUpdating = False
For Each zelle In Bereich
If zelle.Value = "Start" Then zelle.Interior.ColorIndex = 15
Next zelle
End With
End Sub
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Björn,
das Zusammensetzen mit der von Ralf erwähnten Union-Methode sieht dann so aus:
Code:
Sub aaa()
Dim rngGefundeneZellen As Range
Dim rngZelle As Range
For Each rngZelle In Sheets("Kalender").Range("H4:NN4")
If rngZelle.Value = "Start" Then
If Not rngGefundeneZellen Is Nothing Then
Set rngGefundeneZellen = Application.Union(rngGefundeneZellen, rngZelle)
Else
Set rngGefundeneZellen = rngZelle
End If
End If
Next rngZelle
If Not rngGefundeneZellen Is Nothing Then
'rngGefundeneZellen.Select
rngGefundeneZellen.Interior.ColorIndex = 15
End If
End Sub
Gruß, Uwe
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
(08.07.2023, 15:45)Gast 123 schrieb: Wenn du alle Zellen aktivieren willst könnte es über Union gehen.
Moin!
Wie ich schrieb, kann immer nur eine einzige Zelle aktiv sein.
Aber ich wüsste auch nicht, weshalb man das anders brauchen sollte.
Zur Threaderöffnung:
Wenn schon With-Statement, dann unbedingt ein . vor Range setzen!
Hier mal mit Union() und ActiveSheet:
Code:
Sub Vereinigt_euch()
Dim Bereich As Range, Zelle As Range
With ActiveSheet
For Each Zelle In .Range("H4:NN4")
If Zelle.Value = "Start" Then
If Bereich Is Nothing Then
Set Bereich = Zelle
Else
Set Bereich = Union(Bereich, Zelle)
End If
End If
Next Zelle
Bereich.Interior.ColorIndex = 15
End With
End Sub
Sehr viel einfacher ist natürlich der Vorschlag von gast 123
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 16.10.2020
Version(en): 2016
Moin,
ok, da war ich wohl mit meiner Methode auf dem absoluten Holzweg.
Erst mal danke für die vielen Antworten, aber mir ging es nicht darum, die Zellen zu färben, denn das funktioniert mit dem Code, den ich gepostet hatte.
Zu mindestens mit dem Teil:
Code:
If zelle.Value = "Start" Then zelle .Interior.ColorIndex = 15
Mein eigentliches Ziel ist es, alle Zellen mit "Start" zu finden und diese dann um zwei weitere Zellen nach rechts zu erweitern und dann zu verbinden.
Ich dachte, ich könnte dies tun, in dem ich zuerst alle Zellen markiere in der "Start" steht. Das war wohl nichts.
Gruß
Björn
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo
ich weise höflich darauf hin das die Forum Kollegen von verbundenen Zellen abraten, weil es oft zu Problemen kommt.
Wenn sie trotzdem verbunden werden sollen dasnn probiere bitte diesen Code. Mit Warnung bei Überschneidungen!
mfg Gast 123
Code:
Sub Zellen_verbinden()
Dim AC As Range, Txt As String
For Each zelle In Range("H4:AN4")
If zelle = "Start" Then
If WorksheetFunction.CountIf(zelle.Resize(1, 3), "Start") = 1 Then
zelle.Resize(1, 3).MergeCells = True
zelle.Resize(1, 3).Interior.ColorIndex = 1
Else
Txt = Txt & ", " & zelle.Address(0, 0)
zelle.Resize(1, 3).Select
MsgBox zelle.Address(0, 0) & " überschneidet sich mit Folgezellen", vbInformation
End If
End If
Next zelle
If Txt <> "" Then MsgBox "verbundene Zellen in:" & vbLf & "Zelle: " & Mid(Txt, 2)
End Sub
Registriert seit: 16.10.2020
Version(en): 2016
Moin,
ja das funktioniert einwandfrei.
Danke!
Gruß
Björn
Registriert seit: 28.08.2022
Version(en): 365
Hi,
ich möchte mal auf den höflichen Hinweis vom Gast hinweisen und mit Nachdruck eine Erklärung für das Verbinden der Zellen fordern.
Um es kurz zu machen: verbundene Zellen machen immer wieder Ärger. Man muss höllisch aufpassen, dass sie einem nicht in die Quere kommen - sowohl in normalen Excel-Formeln als auch bei VBA-Programmen.
Daher schildere deine Motivation und es lässt sich sicherlich ein Ersatz ohne verbundene Zellen finden.
Gruß,
Helmut
Win10 - Office365 / MacOS - Office365