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

Bedingte Formatierung mittels VBA

Bedingte Formatierung mittels VBA
Matthias
Hi,
ich bräuchte mal kurz Hilfe bei einer einfachen VBA-Aufgabe, die wie folgt ist:
Immer wenn in einer Zelle in Spalte D eine 0 steht, sollen die Zellen in derselben Zeile von Spalte D bis Spalte O eine Füllfarbe "hellgelb" bekommen. Für Zeile 5 hab ich es hinbekommen:
Sub Farbe()
If Cells(5, 4) = "0" Then
Range("D5:O5").Interior.ColorIndex = 36
End If
End Sub
Nun möchte ich dies aber für das gesamte Arbeitsblatt (d.h. alle Zeilen) haben - wie lautet dann der Code?
Danke
Matthias
AW: Bedingte Formatierung mittels VBA
03.03.2010 21:22:16
Hajo_Zi
Hallo Matthias,
unter der Tabelle.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Column = 4 And Target = 0 Then
Range(Target, Target.Offset(0, 11)).Interior.ColorIndex = 36
End If
End If
End Sub

AW: Bedingte Formatierung mittels VBA
03.03.2010 21:33:14
Matthias
Hi,
danke für den Code, ich bekomm's aber noch nicht hin. Wie bzw. wann wird mit diesem Code das Makro ausgeführt? Es ist eigentlich so geplant, dass dieses Makro manuell (durch Schaltfläche) ausgeführt werden soll und die Füllfarben verteilen soll.
Matthias
Anzeige
AW: warum benutzt Du keine bed. Formatierung ?
03.03.2010 21:59:28
Matthias
Hi,
so war auch mein anfänglicher Ansatz. Allerdings möchte ich es in VBA einbauen. Grund:
1. Bei dieser Liste handelt es sich um eine sog. auftragsbezogene Zeichnungsliste, die für einen bestimmten Auftrag aus einer größeren, neutralen Zeichnungsliste per Knopfdruck erzeugt wird. Es gibt also schon ein Makro, in das man den o.g. Code integrieren könnte.
2. Die Formatierung (Füllfarbe) soll auch dann erhalten bleiben, wenn später(!) statt der Null die eigentliche Zeichnungsnummer in der Zelle in Spalte D eingetragen wird. Dies ist meines Wissens per Formel nicht mehr zu machen.
Matthias
Anzeige
ok, dann ist Hajos Bsp. ja passend ... kwT
03.03.2010 22:15:49
Matthias
AW: ok, dann ist Hajos Bsp. ja passend ... kwT
03.03.2010 22:32:30
Matthias
Wie gesagt, ich weiß nicht so recht, wie ich Hajos Code in mein bestehendes Makro einfügen soll, daher hier mal der Code...
Sub Kopie_Auftrag()
' Kopie_Auftrag Makro
' Archivierung
Dim lngNext As Long, i As Long, intIndex As Integer, Msg As Integer
Msg = MsgBox("Daten ins Archiv übernehmen?" & Space(16), 36, "Archivierung")
If Msg = 6 Then
With Sheets("Eingabeblatt")
If Application.CountA(.Range("z_1"), .Range("z_2"), .Range("z_3"), .Range("z_4"), _
.Range("z_5"), .Range("z_6"), .Range("z_7"), .Range("z_8"), .Range("z_9"), _
.Range("z_10"), .Range("z_11"), .Range("z_12"), .Range("z_13"), .Range("z_14"), _
.Range("z_15"), .Range("z_16"), .Range("z_17"), .Range("z_18"), .Range("z_19"), _
.Range("z_20"), .Range("z_21"), .Range("z_22"), .Range("z_22"), .Range("z_23"), _
.Range("z_24"), .Range("z_25"), .Range("z_26"), .Range("z_27"), .Range("z_28"), _
.Range("z_29")) = 0 Then Exit Sub
End With
With Sheets("Archiv")
lngNext = .Cells(Rows.Count, 1).End(xlUp).Row + 1
For intIndex = 1 To 29
.Cells(lngNext, intIndex) = Sheets("Eingabeblatt").Range("z_" & intIndex).Value
Next
End With
End If
' Spalten ab K aus "Zeichnungsliste" kopieren und Inhalte/Formate in Vorlage einfügen
Sheets("Zeichnungsliste").Select
Columns("K:AH").Select
Selection.Copy
Workbooks.Add Template:= _
"S:\Dept\A032\032.3\Auftrag\_temporär\Zeichnungsliste HR.xlt"
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteComments, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
' n.v.-Zeilen löschen
For i = Cells(Rows.Count, 7).End(xlUp).Row To 1 Step -1
If Cells(i, 7) = "n.v." Then Rows(i).Delete
Next i
' Bindestriche und Pünktchen ersetzen durch Rotorbreite, Rotordurchmesser usw.
' ACHTUNG! Vor Sternchen eine Tilde setzen, Pünktchen sind Sonderzeichen ALT+0133
Cells.Replace what:=" -/-", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace what:="HR …/…", Replacement:="HR " & Workbooks("ZL_HR.xls").Sheets(" _
Eingabeblatt").Range("Sichtergröße"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace what:="-/…", Replacement:="-/" & Workbooks("ZL_HR.xls").Sheets("Eingabeblatt") _
.Range("Rotordurchmesser"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace what:="…/-", Replacement:=Workbooks("ZL_HR.xls").Sheets("Eingabeblatt").Range( _
"Rotorbreite") & "/-", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace what:="PC …/…-…", Replacement:="PC " & Workbooks("ZL_HR.xls").Sheets(" _
Eingabeblatt").Range("Sichtergröße") & "-" & Workbooks("ZL_HR.xls").Sheets("Eingabeblatt").Range("BaugrößeLM"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace what:="PC …/…", Replacement:="PC " & Workbooks("ZL_HR.xls").Sheets(" _
Eingabeblatt").Range("Sichtergröße"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace what:="….", Replacement:=Workbooks("ZL_HR.xls").Sheets("Eingabeblatt").Range(" _
Zyklongröße"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace what:="BREITESW", Replacement:=Workbooks("ZL_HR.xls").Sheets("Eingabeblatt"). _
Range("BreiteSeitenwände"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace what:="BREITEGS", Replacement:=Workbooks("ZL_HR.xls").Sheets("Eingabeblatt"). _
Range("BreiteGehäusesegmente"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace what:="BGSPANN", Replacement:=Workbooks("ZL_HR.xls").Sheets("Eingabeblatt"). _
Range("BaugrößeSpannschiene"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
' Benutzerdefinierte Ansicht "Maschinenstruktur" aufrufen
ActiveWorkbook.CustomViews("Maschinenstruktur").Show
End Sub

Anzeige
Der gepostete Code von Hajo ...
03.03.2010 22:46:44
Hajo
Hallo
... gehört in die entsprechende Tabelle, in der dieser ausgeführt werden soll.
Gruß Matthias
Stimmt, aber...
03.03.2010 22:58:22
Matthias
Hi,
sorry wenn ich so hartnäckig bin, aber es ist noch nicht ganz das, was ich wollte. Der Code von Hajo an sich in Arbeitsblatt 1 funktioniert, und zwar dann, wenn ein Wert in einer Zelle in Spalte D geändert wird. Ich möchte das Makro aber mit in ein bestehendes Makro einbinden, das per Schaltfläche ausgelöst wird. Dieses Makro erzeugt die Tabelle aus einer bestehenden "Master-Tabelle", löscht best. Zeilen, ersetzt best. Ausdrücke etc. und schließlich soll eben in diesem Zuge auch die gelbe Füllfarbe für die genannten Zellen vornehmen.
Ich brauche also kein "Private Sub", sondern einfach nur den Code, den ich in mein "großes" Makro einfügen kann.
Matthias
Anzeige
Wahrscheinl benötigst du nur eine sog...
04.03.2010 00:40:52
Luc:-?
…PgmSchleife um deinen Code herum, Matthias;
dafür kämen For i = 1 To nrderletztenzeile und/oder For j = 1 To nrderletztenspalte ineinander­geschachtelt, je nachdem, ob das für Zellen nur einer Zeile/Spalte oder alle Zellen aller Zeilen und Spalten eines Bereichs gelten soll, infrage. Natürlich kann auch das schnellere For Each zelle In zellbereich genutzt wdn, aber dabei wird ggf ein separater Zähler benötigt.
Wie das alles zum vorhandenen Pgm passt, musst du selber sehen, denn das könnten wir ja nur raten.
Zu PgmZyklen/Schleifen, das A&O der Pgmierung, solltest du in der VBE-Hilfe nachlesen (F1 auf dem VB-Editor).
Gruß Luc :-?
Anzeige
AW: Stimmt, aber...
04.03.2010 08:05:10
Hajo_Zi
Hallo Matthias,
das hat nur den Nachteil es müssen alle Zellen der Spalte D geprüft werden, was Zeit kostet. Mit meiner Variante erfolgt die Färbung sofort nach Eingabe.
Gruß Hajo
AW: Bedingte Formatierung mittels VBA
04.03.2010 00:12:46
Henrik
Hallo Matthias,
füge in dein vorhandendes Makro in die entsprechenden Zeile ein:
Call Machmichbunt
Als seperates Modul solltest du folgenden Code einfügen:

Sub Machmichbunt()
olla = "hier_dein_worksheet_name"
SpalteD = 4
With ActiveWorkbook.Worksheets(olla)
letzteZeilemitWerten = .Cells.SpecialCells(xlLastCell).Row
For zae1 = 1 To letzteZeilemitWerten
If Not IsEmpty(.Cells(zae1, SpalteD)) And .Cells(zae1, SpalteD) = 0 Then
.Range("D" & zae1 & ":O" & zae1).Select
With Selection
.Interior.ColorIndex = 36
End With
End If
Next zae1
End With
End Sub

Henrik
Anzeige
AW: Bedingte Formatierung mittels VBA
04.03.2010 10:06:50
Matthias
Hallo Henrik,
danke, funktioniert perfekt, genau das war es, was ich wollte!
Matthias

327 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige