Servus wiedermal.
Ich bin halt am Aufbau einer besseren Planung, daher des öfters auf Hilfe angewiesen. Dazu herzlichen Dank im voraus.
Ich habe:
A’ Jahresplan (1 Tabellenblatt) und B’ Systemsplan (auch 1 TB) - diese pflegen alle Mitarbeiter.
Sowie einen detailierten C’ Monatsplan für die MA-Auslastungen - der wird von mir gehütet.
Ich möchte:
Aus dem A’ Jahresplan Zellen kopieren, falls diese die Farbe „Rot“ oder „violett“ haben, und im C’ Monatsplan reinkopieren. (Anm. Rot steht für Ferien, Violett für Spezialeinsatz).
Aus dem B’ Systemsplan ebenfalls Zellen kopieren, falls diese die Farbe „Grün“ aufweisen.
Das knifflige:
- Da ich im C’ Monatsplan wöchentlich Einträge mache (Farb+Text). dürfen diese nur überschrieben werden, wenn die obigen Bedingungen gesetzt sind.
- Muss ich jeweils die anderen Files offen haben, um das Makro ausführen zu können?
Das soll doch eine Herausforderung sein 
Ich hoffe es ist genug verständlich geschrieben, danke für die Vorschläge.
Gruss Christian
Hi Christian,
wurden die Farben manuell oder mittels bedingter Formatierung erzeugt?
Nur im ersteren Fall kann man per vba die Farben direkt auslesen…
Grundsätzlich kann man nur aus geöffneten Dateien Zellwerte auslesen.
Mal von nem alten XL4-Makro abgesehen.
Gruß
Reinhard
Hi Christian,
wurden die Farben manuell oder mittels bedingter Formatierung
erzeugt?
Nur im ersteren Fall kann man per vba die Farben direkt
auslesen…
das kann man so ganz nicht sagen…
Beispiel:
sub test()
MsgBox Selection.FormatConditions(1).Interior.ColorIndex
end sub
das gibt - wenn bedingte Formatierung vorhanden ist die Farbe aus, die es anzeigt, wenn true zurückgeliefert wird.
Problem dabei ist allerdings, dass ich nicht weiss, wie man prüfen kann, ob die bedingung auch true ist 
Wenn allerdings keine Formatierung da ist ists auch doof weil dann debuggt was *g*
Gruß
Munich
Hi Munich,
das gibt - wenn bedingte Formatierung vorhanden ist die Farbe
aus, die es anzeigt, wenn true zurückgeliefert wird.
Problem dabei ist allerdings, dass ich nicht weiss, wie man
prüfen kann, ob die bedingung auch true ist 
tja, das ist das Problem, schon bei einer Bedingung, könnten ja 3 sein. Deshalb muss man jede Bedingung mit dem Zellinhalt verhleichen usw.
Wenn allerdings keine Formatierung da ist ists auch doof weil
dann debuggt was *g*
Nö, kannste vorher überprüfen mit
if …Formatconditions.count > 0 then
Aus dem Inet habe ich folgenden Code. Angenommen A1 hat die bed. Formatierung „=B1=10“ dann funktioniert wenn man ihn mit einer Schaltfläche startet.
Aber in einer Zelle als Funktion wie „=GetCellColor(A1)“ bringt der Code „#Wert“. Hängt irgendwie mit dem Nmaen definieren zusammen oder so.
Wenn man die Funktion über Einfügen Funktion Bentzerdefiniert, wird angezeigt dass diese Funktion braucht keine Argumente. !?
Gruß
Reinhard
Sub TestCellColor()
MsgBox "Meine Farbe ist: " & GetCellColor(ActiveCell)
End Sub
Function GetCellColor(cell As Range) As Integer
Dim i
Dim myVal
Dim myColor As Integer
Dim done As Boolean
On Error Resume Next
Names("testname").Delete
On Error GoTo 0
Application.ReferenceStyle = xlR1C1
myVal = cell.Value
myColor = cell.Interior.ColorIndex
done = False
For i = 1 To cell.FormatConditions.Count
With cell.FormatConditions.Item(i)
If .Type = 1 Then
Select Case .Operator
Case xlBetween
If myVal \>= Evaluate(.Formula1) And myVal Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlGreaterEqual
If myVal \>= Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlLess
If myVal Evaluate(.Formula2) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlNotEqual
If myVal Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
End Select
ElseIf .Type = 2 Then
Names.Add Name:="testname", RefersToR1C1Local:=.Formula1
If Evaluate("testname") Then
myColor = .Interior.ColorIndex
done = True
End If
Names("testname").Delete
Else
MsgBox "Unbekannter Formattyp: " & .Type
Exit Function
End If
End With
If done Then Exit For
Next
Application.ReferenceStyle = xlA1
GetCellColor = myColor
End Function
Guten Morgen,
Also ich verstehe nur Bahnhof was Ihr da diskutiert habt.
In den Tabellen „Jahresplan“ und „Systemsplan“ werden die Zellen manuell gefärbt.
Mit dem angehängten Marko-Code habe ich noch nichts anfangen können, weil ich den Bezug zu den einzelnen Files (namentlich „Jahresplan“ + „Systemsplan“) nicht eruieren kann.
Gruss Christian
Hi Christian,
Also ich verstehe nur Bahnhof was Ihr da diskutiert habt.
es ging um die problematik die Farbe von per bed. Formatierung gefärbten Zellen auszulesen.
In den Tabellen „Jahresplan“ und „Systemsplan“ werden die
Zellen manuell gefärbt.
Diese Info ist wichtig.
Mit dem angehängten Marko-Code habe ich noch nichts anfangen
können, weil ich den Bezug zu den einzelnen Files (namentlich
„Jahresplan“ + „Systemsplan“) nicht eruieren kann.
Es fehlen noch Infos von dir zur Struktur der Dateien. In „Jahresplan“ und/oder „Systemsplan“ sind z.B. A13 G34 U12 bunt, wohin damit in der Datei C? In die gleichen Zelladressen? Was tun wenn A13 in A und B gefärbt ist, welcher Wert soll dann nach C?
Gruß
Reinhard
Hallo Reinhard
oke, ich versuchs aufzuzählen:
Wenn im Jahresplan die Zellen D50:smiley:65 - DV50:smiley:V65 Rot oder Violett sind, soll es diese im Monatsplan in D50:smiley:65 - DV50:smiley:V65 reinpinseln.
Wenn im Systemsplan die Zellen C50:C65 - DU50:smiley:U65 Grün formatiert sind, soll es im Monatsplan in D50:smiley:65 - DV50:smiley:V65 reinpinseln.
Wobei hier der Jahresplan die höhere Priorität hat, als der Systemsplan.
Hoffe somit die nötigen Daten „geliefert“ zu haben.
Dankeschön.
Gruss Christian
Hallloooo (Echooo) Reinhard???
Gibts Dich noch?
Wenn im Jahresplan die Zellen D50:smiley:65 - DV50:smiley:V65 Rot oder
Violett sind, soll es diese im Monatsplan in D50:smiley:65 -
DV50:smiley:V65 reinpinseln.
Wenn im Systemsplan die Zellen C50:C65 - DU50:smiley:U65 Grün
formatiert sind, soll es im Monatsplan in D50:smiley:65 - DV50:smiley:V65
reinpinseln.
Wobei hier der Jahresplan die höhere Priorität hat, als der
Systemsplan.
Sorry Christian,
hatte dich vergessen 
ungetestet habe ich mal was zusammen gebastelt. In deiner Monatstabelle:
Alt+F11, Einfügen Modul , in diese Modul den Code kopieren, Editor schliessen. Im Bereich A1:A3 die zellen nach Wunsch färben. Dann über Extras–Makro–Makro–Ausführen das Makro „farbe“ ausführen, somit hast du die Werte für rot, violett, grün.
Mit Extras–Makro–Makro–bearbeiten das Makro tt bearbeiten, also die Farbwerte 10,12,14 durch deine ermitteltenersetzen, Editor schliessen.
Dann extras–Makro-Makro–tt–Ausführen.
ups, Code vergessen:smile:
Option Explicit
Sub tt()
Dim wsJ As Worksheet, wsS As Worksheet, zei As Long, spa As Integer
Workbooks.Open "c:\GenauePfadAngabe\Jahresplan.xls"
Set wsJ = ActiveWorkbook.Worksheets("Tabelle1")
Workbooks.Open "c:\GenauePfadAngabe\Systemplan.xls"
Set wsS = ActiveWorkbook.Worksheets("Tabelle1")
With ThisWorkbook.Worksheets("Tabelle1")
For zei = 50 To 65
For spa = 4 To .Range("DU65").Column
If wsJ.Cells(zei, spa).Interior.ColorIndex = 10 Or wsJ.Cells(zei, spa).Interior.ColorIndex = 12 Then
.Cells(zei, spa) = wsJ.Cells(zei, spa).Value
.Cells(zei, spa).Interior.ColorIndex = wsJ.Cells(zei, spa).Interior.ColorIndex
ElseIf wsS.Cells(zei, spa - 1).Interior.ColorIndex = 14 Then
.Cells(zei, spa) = wsS.Cells(zei, spa - 1).Value
.Cells(zei, spa).Interior.ColorIndex = wsS.Cells(zei, spa - 1).Interior.ColorIndex
Else
'tu nix
End If
Next spa
Next zei
Workbooks("Jahresplan.xls").Close
Workbooks("Systemplan.xls").Close
End With
End Sub
Sub farbe()
Dim n
For n = 1 To 3
MsgBox Cells(n, 1).Interior.ColorIndex
Next n
End Sub
Gruß
Reinhard
Wow! Es klappt!
Jupiiii…!
Danke vielmals Reinhard.
Du Reinhard, jetzt habe ich noch eine Zusatzfrage. (Wenn es erlaubt ist?)
In einem weiteren Schritt möchte ich die Betriebsmittelverfügbarkeit in meiner Auftragsübersicht darstellen.
Simpel mit hellgrüner oder rosafarbener Zellenschattierung.
Hierfür habe ich in Tabellenblatt2 die nötigen verknüpfungen erichtet (wenn - dann zähler).
Meine Bedingung nun (im gleichem Worksheet):
Tabelle1 - Spalte 3 ab Zeile 4 bis n > wenn der Name „Data“ steht, dann prüfe in Tabelle2 ob in Zelle 10 eine 1 oder eine 0 steht.
Wenn 1 dann fülle in Spalte 4 ab Zeile 4 bis n mit hellgrüner Farbe aus, wenn 0 steht, dann mit rosafarbe.
Ich habe versucht Dein „VorlageMarko“ umzuändern, aber mit den Bedingungen klappt dies nicht.
Kannst Du mir nochmals bitte helfen Master?
Herzlichen Dank und Gruss
Christian
Hi Christian,
Tabelle1 - Spalte 3 ab Zeile 4 bis n
ist klar
Tabelle2 ob in Zelle 10
ist unklar, 10 - n ?, welche Spalte?
Spalte 4 ab Zeile 4 bis n
in Tabelle1 oder 2?
Wie sind denn die 2 Farbwerte?
Gruß
Reinhard
Hi Reinhard
Sorry !! ->
In der Tabelle2 soll es in der Zelle C10 (und nur dort, also keine mehrauswahl) nachschauen.
In der Tabelle1 soll er ab Spalte 4 und Zeile 4 bis n die Zellen ausfüllen, wenn in der Tabelle 2 Zelle C10 eine 1 steht = Farbcode 35 (hellgrün) und bei einer 0 den Farbcode 22 (Rosa).
Kann man statt des vollständigen Namen „Data“ auch bezwecken, dass es dies macht, wenn der Name „Data“ enthalten ist. Also nicht 1:1 übersetzt, sondern nur beinhaltet ist? (Bsp: Data #039-63)
(Weil ich die Serialnummern jeweils im Namen anfüge als #039XXX)
Ich hoffe Dir meine Gedanken näher gebracht zu haben. Wünsche Dir ein schönes Wochenende,
Cheers Christian
In der Tabelle2 soll es in der Zelle C10 (und nur dort, also
keine mehrauswahl) nachschauen.
In der Tabelle1 soll er ab Spalte 4 und Zeile 4 bis n die
Zellen ausfüllen, wenn in der Tabelle 2 Zelle C10 eine 1 steht
= Farbcode 35 (hellgrün) und bei einer 0 den Farbcode 22
(Rosa).
Kann man statt des vollständigen Namen „Data“ auch bezwecken,
dass es dies macht, wenn der Name „Data“ enthalten ist. Also
nicht 1:1 übersetzt, sondern nur beinhaltet ist? (Bsp: Data
#039-63)
k.A. ob ich noch mit den Spalten und Bedingungen durchblicke *g
Option Explicit
Sub tt()
Dim Zei As Long, Wert
Wert = Worksheets("Tabelle2").Range("C10")
If CStr(Wert) "1" And CStr(Wert) "0" Then Exit Sub
With Worksheets("Tabelle1")
For Zei = 1 To .Range("D65536").End(xlUp).Row
If .Cells(Zei, 3) Like "Data\*" Then .Cells(Zei, 4).Interior.ColorIndex = IIf(CStr(Wert) = "1", 35, 22)
Next Zei
End With
End Sub
Gruß
Reinhard
Hoi Reinhard
danke ich habs probiert, es geht nicht. Meine Frage zu Dem Makro:
- If CStr(Wert) „1“ And CStr(Wert) „0“ Then Exit Sub => Wie ist das gemeint? Ich lese daraus, dass wenn ich 1 oder 0 habe soll es beenden?!
- If .Cells(Zei, 3) Like „Data*“ => Ich lese, immer vorausgesetzt ich bin laie, dass es in Zeile 3 den Wert Data* lesen soll. Richtig? Ich meinte dies in Spalte c, bzw. Spalte 3.
Sehe ich das falsch?
danke ich habs probiert, es geht nicht. Meine Frage zu Dem
Makro:
- If CStr(Wert) „1“ And CStr(Wert) „0“ Then
Exit Sub => Wie ist das gemeint? Ich lese daraus, dass wenn
ich 1 oder 0 habe soll es beenden?!
- If .Cells(Zei, 3) Like „Data*“ => Ich lese, immer
vorausgesetzt ich bin laie, dass es in Zeile 3 den Wert Data*
lesen soll. Richtig? Ich meinte dies in Spalte c, bzw. Spalte
-
Sehe ich das falsch?
Hallo Christian, nein du siehst das alles korrekt. Ich habe da wohl die falsche Logok gehabt mit 0 und 1.
Probiers mal so:
Sub tt()
Dim Zei As Long, Wert
Wert = Worksheets("Tabelle2").Range("C10")
If CStr(Wert) = "1" Or CStr(Wert) = "0" Then
With Worksheets("Tabelle1")
For Zei = 1 To .Range("D65536").End(xlUp).Row
If .Cells(Zei, 3) Like "Data\*" Then .Cells(Zei,4).Interior.ColorIndex = IIf(CStr(Wert) = "1", 35, 22)
Next Zei
End With
End If
End Sub
Gruß
Reinhard