Autor
|
Thema: bedingte Formatierung erweitern !!! (3902 mal gelesen)
|
jogi007 Mitglied Digital Artist
Beiträge: 4 Registriert: 13.06.2006
|
erstellt am: 13. Jun. 2006 16:38 <-- editieren / zitieren --> Unities abgeben:
Hey Leute, habe mit eurem VBA Makro AKT_Blatt (Akt_Blatt) geschafft meine formatierung in der Spalte (A3:A14)der Platzierung in der gewünschten Größe hinzubekommen. Nu aber mein Problem --> die Spalten B und C enthalten die Namen bzw. Aktuellen Punktestand der Tabelle und die sollen nun aber auch die selbe Schriftgröße bekommen wie die erste Spalte. Die normale bedingte Formatierung kann ich vergessen da ich die Schriftgröße nicht ändern kann. Habt ihr da ne Idee oder ein passende Makro für mich, bin absoluter VBA Neuling (DAU) Gruß Jogi007 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 13. Jun. 2006 17:56 <-- editieren / zitieren --> Unities abgeben: Nur für jogi007
Zitat: Original erstellt von jogi007: Hey Leute, habe mit eurem VBA Makro AKT_Blatt (Akt_Blatt) geschafft meine formatierung in der Spalte (A3:A14)der Platzierung in der gewünschten Größe hinzubekommen. Nu aber mein Problem --> die Spalten B und C enthalten die Namen bzw. Aktuellen Punktestand der Tabelle und die sollen nun aber auch die selbe Schriftgröße bekommen wie die erste Spalte. Die normale bedingte Formatierung kann ich vergessen da ich die Schriftgröße nicht ändern kann.Habt ihr da ne Idee oder ein passende Makro für mich, bin absoluter VBA Neuling (DAU) Gruß Jogi007
mal ohne VBA - vielleicht aber auch, weil ich es nicht verstanden habe; besonders mit dem Verweis auf den Thread mit dem Makro in dem es um Einfärben nach WerteBereich geht... ;-) ist manchmal nicht leicht ohne Glaskugel zu verstehen ;) und ein einfaches Formatieren (mittels Symbolleiste Standard/Format übertragen) der Zelle geht nicht, oder willst du je nach Ereignis, dass sich Schriftgrösse ändert?
hmmm... Ein VBA Neuling ist doch nicht gleich ein DAU... ------------------ Am Anfang war kein Licht - und Vater blickte Kalt [Diese Nachricht wurde von Thomas Harmening am 13. Jun. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jogi007 Mitglied Digital Artist
Beiträge: 4 Registriert: 13.06.2006
|
erstellt am: 13. Jun. 2006 18:54 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Thomas Harmening: Makro in dem es um Einfärben nach WerteBereich geht... ;-)
Makro enthält aber auch--> schriftart und größe die habe ich genutzt den Farbformatierung hab ich einfach gelöscht --> hab die version benutzt die weiter unten angehangen ist Hier mal die Version von Mir: ---------------------------------------------------------------------- Set Target = Range("E3:E14") For Each objCell In Target If Not Intersect(objCell, Range("E3:E14")) Is Nothing Then With objCell Select Case .Value Case 1 .NumberFormat = "General" .Font.Name = "Arial" .Font.Size = 18 Case 2 .NumberFormat = "General" .Font.Name = "Arial" .Font.Size = 16 Case 3 .NumberFormat = "General" .Font.Name = "Arial" .Font.Size = 14 Case 4 To 14 .NumberFormat = "General" .Font.Name = "Arial" .Font.Size = 11 Case Else .Interior.ColorIndex = xlNone '.Borders(xlDiagonalDown).LineStyle = xlNone '.Borders(xlDiagonalUp).LineStyle = xlNone '.Borders(xlEdgeLeft).LineStyle = xlNone '.Borders(xlEdgeTop).LineStyle = xlNone '.Borders(xlEdgeBottom).LineStyle = xlNone '.Borders(xlEdgeRight).LineStyle = xlNone End Select End With End If Next End Sub -------------------------------------------------------------------- Tabelle die Formatiert werden soll ist angehängt (.jpg) Die werte werden täglich aktualisiert (z.B WM TIP) Die Sortierung macht ebenfalls ein kleines Makro --> Calculate Range("B3:C14").Select Selection.Sort Key1:=Range("C3"), Order1:=xlDescending, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Akt_Blatt Calculate Range("F3:G14").Select Selection.Sort Key1:=Range("G3"), Order1:=xlDescending, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Akt_Blatt_1 Worksheets("Tipauswerter").Columns("A:G").AutoFit --------------------------------------------------------------------- und mit der Spalte A klappt das prima (vielleicht wird auch irgentwann bund ?!?!?!) und nur wollt ich einfach den Formatierungsbereich erweitern aber da ist mein Latein am Ende den alle Rangeaufrufe die ich mach in den Case abschnitte werden als fehler angemeckert. Hoffe das reicht kann wenn gewünscht ja mal eine Kurzversion der Tipauswertung zuschicken. Gruß Jogi007 Dank an alee für die Hilfe
[Diese Nachricht wurde von jogi007 am 13. Jun. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 13. Jun. 2006 21:24 <-- editieren / zitieren --> Unities abgeben: Nur für jogi007
;-) wobei eine WM.Tippauswertung auch ohne VBA zu realisieren wäre... da die Veränderung der Zelle nur auf die aktuelle objcell sich auswirkt, musst du deinen Zellbereich der geändert werden muss erzwingen: Range("E3:G3").NumberFormat = "General" , etc... ändere einfach - ist nich' schön, aber es tut:
Code: *schnipp* Case 1 [E3:G3].NumberFormat = "General" [E3:G3].Font.Name = "Arial" [E3:G3].Font.Size = 18 [E3:G3].Font.ColorIndex = 3 Case 2 [E4:G4].NumberFormat = "General" [E4:G4].Font.Name = "Arial" [E4:G4].Font.Size = 16 [E4:G4].Font.ColorIndex = 7 Case 3 [E5:G5].NumberFormat = "General" [E5:G5].Font.Name = "Arial" [E5:G5].Font.Size = 14 [E5:G5].Font.ColorIndex = 9 Case 4 To 14 *schnapp*
ohne Vba; eine Auswertung über Rang und Sverweis() sollte das auch realisieren - dann entfällt auch das unter Umständen üble Sortieren *zwinker* manch' einer hat so schon die Daten durcheinander gebracht Ps: Spaltenköpfe sind mitunter notwändig um von aussen zu wissen wo was passieren soll ;-) ------------------ Am Anfang war kein Licht - und Vater blickte Kalt Miss Brauch [Diese Nachricht wurde von Thomas Harmening am 13. Jun. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jogi007 Mitglied Digital Artist
Beiträge: 4 Registriert: 13.06.2006
|
erstellt am: 13. Jun. 2006 23:29 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Thomas Harmening:Range("E3:G3").NumberFormat = "General" , etc... [/B]
Das es auch ganz ohne geht hab ich gesehen aber iuch fand das Sortieren am einfachsten veil die Zellen mit den Punkte nur verweise sind auf ein Anderes tabellen blatt. Danke erstmal für die Version aber das klappt leider nicht wiE geplant, denn es werden nur die die angegebene Ranges z.B ("F3:G3") anders formatiert und leider nicht der restlichen mit dem Inhalt in der F Spalte ;-))) siehe Bilder Denn es könnt ja mehrer dritte zweite oder erste Plätze geben und dann bin ich festgenagelt auf die formatierung und dann passen die Ranges leider nicht.Case 2 auch im Bereich E6:G6 stehen und dann wäre ein zweiter Platz eben nur schriftgröße 14 und nicht 16 Hab die mal zwei bilder angehängt Neu und Alt bei Alt bitte nur auf Schriftgröße in Spalte A achten Und deine Version ist dann etwas umständlich die geht dann einfacher. Am Schluß einfach einen bzw. drei Range.Select befehle ausführen. Muster ---------- Range("B3:C3", "F3:G3").Select Selection.Font.ColorIndex = 1 Selection.Font.Size = 18 Range("A4:C4", "F4:G4").Select Selection.Font.ColorIndex = 1 Selection.Font.Size = 16 Range("A5:C5", "F5:G5").Select Selection.Font.ColorIndex = 1 Selection.Font.Size = 14 Range("A6:C14", "F6:G14").Select Selection.Font.ColorIndex = 1 Selection.Font.Size = 12 Vielleicht bin ich aber auch zu Anspruchsvoll Danke für Eure Hilfe Gruß Jogi007 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 14. Jun. 2006 17:04 <-- editieren / zitieren --> Unities abgeben: Nur für jogi007
sagte ich doch, mein code ist nicht schön ;-) auch weil es starr ist und nur stur die 3 Zeilen richtig formatiert und bei einem mehrfachvorkommen der Zahlen 1,2,3 die Nachbarzellen nicht richtig formatiert wird... hier mal ein besserer code, der auch das doppelte vorhanden sein von Platz 1,2 oder 3 richtig formatiert. die mit ' gekennzeichneten Zeilen kann man rauswerfen
Code:
Sub test() Set Target = Range("E3:E14") For Each objCell In Target If Not Intersect(objCell, Range("E3:E14")) Is Nothing Then 'With objCell With Range(objCell.Address, objCell.Offset(0, 2).Address) Select Case objCell.Value Case 1 '.NumberFormat = "General" '.Font.Name = "Arial" .Font.Size = 18 .Font.ColorIndex = 44 'bei mir gold Case 2 '.NumberFormat = "General" '.Font.Name = "Arial" .Font.Size = 16 .Font.ColorIndex = 48 'bei mir silber Case 3 '.NumberFormat = "General" '.Font.Name = "Arial" .Font.Size = 14 .Font.ColorIndex = 46 'bei mir bronze Case Else .Interior.ColorIndex = xlNone .Font.Size = 11 End Select End With End If Next End Sub
PS. mit .select- Anweisungen habe ich auch mal VBA angefangen - bis mal im Forum hier gesagt wurde, das ist überflüssig und unschön ;-) - und kostet Zeit [Diese Nachricht wurde von Thomas Harmening am 14. Jun. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
günther andresen Mitglied
Beiträge: 28 Registriert: 11.12.2004
|
erstellt am: 14. Jun. 2006 19:13 <-- editieren / zitieren --> Unities abgeben: Nur für jogi007
|
jogi007 Mitglied Digital Artist
Beiträge: 4 Registriert: 13.06.2006
|
erstellt am: 14. Jun. 2006 20:44 <-- editieren / zitieren --> Unities abgeben:
Dank euch beiden das Makro von Thomas macht genau das was ich will und ist zudem erweiterbar auf x Platzierungen. aber deine Erste Version funktionierte auch wenn man alle Plätze belegt und die Range verschiebt. Case 1 [E3:G14].NumberFormat = "General" [E3:G14].Font.Name = "Arial" [E3:G14].Font.Size = 18 [E3:G14].Font.ColorIndex = 3 Case 2 [E4:G14].NumberFormat = "General" [E4:G14].Font.Name = "Arial" [E4:G14].Font.Size = 16 [E4:G14].Font.ColorIndex = 7 Case 3 [E5:G14].NumberFormat = "General" [E5:G14].Font.Name = "Arial" [E5:G14].Font.Size = 14 [E5:G14].Font.ColorIndex = 9
usw. aber du mußt alle möglich platzierung abfangen also bei 20 möglichen Plätzen case bis 20 Aber die andere Version liest sich eleganter und ist wohl richtig programmiert ohne doppel durchläufen. (man sieht dabei wie excel arbeitet) Aber wie kommt man auf sowas. 'With objCell With Range(objCell.Address, objCell.Offset(0, 2).Address) einfach den With Befehl austauschen ?!?!?! Also nochmal herzlichen Dank bis zum Nächsten Problem. @ Thomas gibt irgendein gutes Buch oder alles Learning bei duing
Gruß Jogi007 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 14. Jun. 2006 22:42 <-- editieren / zitieren --> Unities abgeben: Nur für jogi007
Code: For Each objCell In Target If Not Intersect(objCell, Range("E3:E14")) Is Nothing Then With objCell Select Case .Value Case 1
With objCell behandelt nur die Zellewie du dan festgestellst hast braucht es Code: Range("B3:C3", "F3:G3").Select Selection.Font.ColorIndex = 1 Selection.Font.Size = 18
um den Bereich zu defieren der Behandelt werden muss... folglich tauschen wir With objCell mit With Range(objCell.Address, objCell.Offset(0, 2).Address) um einen Bereich zu haben abgefragt auf übereistimmung wird trotzdem nur die Zelle Select Case objCell.Value
Code: For Each objCell In Target If Not Intersect(objCell, Range("E3:E14")) Is Nothing Then 'With objCell With Range(objCell.Address, objCell.Offset(0, 2).Address) Select Case objCell.Value Case 1
im Prinzip kann das macro auch so aussehen wie in http://ww3.cad.de/foren/ubb/Forum226/HTML/000484.shtml#000001 man musss nur arrays für die Farben, Fontgrössen und Werte der Plätze definieren und die eine oder andere zeile abändern - IMHO Bücher kann ich dir leider keine nennen, da ich autoditaktisch lerne, mit viel try and error ;-) Man muss nur einen Code nur lesen und verstehen können, dann ist das Anpassen auch kein Problem - die Bausteine gibt es dann im I-net ;) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |