Guten Tag,
ich möchte die Attribute (Färbung, Schriftart usw.) in einer VBA-Function abhängig von Parametern ändern.
Wie mache ich das?
Range, Offset u.a. funktioniert nicht.
Danke
Laika
Guten Tag,
ich möchte die Attribute (Färbung, Schriftart usw.) in einer VBA-Function abhängig von Parametern ändern.
Wie mache ich das?
Range, Offset u.a. funktioniert nicht.
Danke
Laika
Hallo Laika,
zeichne doch einfach mal ein Makro auf, während du die Farbe/Schriftart usw. einer Zelle änderst. Dann siehst du im Code, wie das geht.
Gruß, Andreas
Hallo Andreas,
zeichne doch einfach mal ein Makro auf, während du die
Farbe/Schriftart usw. einer Zelle änderst. Dann siehst du im
Code, wie das geht.
Natürlich, mache ich immer, um auf einfache Weise den VBA-Code zu ermitteln. Nur, wie adressiere ich die Zelle?
Einfach mit „Range(„H16“).xxx“ funktioniert nicht.
Laika
Hallo Laika,
was funktioniert denn nicht?
Das hier z.B. geht problemlos:
Sub tt()
Sheets("Tabelle1").Cells(1, 1).Font.FontStyle = "Kursiv"
Sheets("Tabelle1").Cells(1, 1).Interior.ColorIndex = 3
End Sub
Gruß, Andreas
N’abend Andreas,
was funktioniert denn nicht?
Das hier z.B. geht problemlos:Sub tt()
Sheets(„Tabelle1“).Cells(1, 1).Font.FontStyle = „Kursiv“
Sheets(„Tabelle1“).Cells(1, 1).Interior.ColorIndex = 3
End Sub
Geht bei mir nicht. Ich habe übrigens eine Function, keine Sub!
Laika
Geht bei mir nicht. Ich habe übrigens eine Function, keine
Sub!
Hallo Laika,
mir noch unklar was du möchtest, meinst du es so:
Sub test()
Call tt(Range("A5:A10"))
End Sub
Function tt(Zellenbereich As Range)
Zellenbereich.Font.FontStyle = "Kursiv"
Zellenbereich.Interior.ColorIndex = 3
End Function
Gruß
Reinhard
Grüezi Laika
ich möchte die Attribute (Färbung, Schriftart usw.) in einer
VBA-Function abhängig von Parametern ändern.Wie mache ich das?
Range, Offset u.a. funktioniert nicht.
Das funktioniert sowohl mit einer Sub wie mit einer Function - bei letzterer aber nur dann, wenn diese nicht aus einer Zelle im Tabellenblatt aus aufgerufen wird.
In diesem Falle darf eine Sub ‚nur‘ einen Rückgabewert an die aufrufende Zelle zurück geben, nicht aber selbige (oder andere) beschreiben oder Formate zuweisen. Das wird von Excel zuverlässig unterbunden, da ansonsten der Berechnungsbaum inkonsistent werden könnte.
Hier noch ein interessanter Artikel aus der MS-KB zu diesem Thema:
http://support.microsoft.com/kb/170787/en-us
Verwende daher die Bedingte Formatierung um Zellen in Abhängigkeiten einzufärben oder programmiere das Ganze mit dem Change()-Event des Tabellenblattes.
Mit freundlichen Grüssen
Thomas Ramel
Grüezi wohl Thomas,
Das funktioniert sowohl mit einer Sub wie mit einer Function -
bei letzterer aber nur dann, wenn diese nicht aus einer Zelle
im Tabellenblatt aus aufgerufen wird.
Genau das will ich aber machen. Hier mein ausführliches Problem:
steht in einer Zelle, kann positiv oder negativ sein.
soll in der Zelle daneben stehen und soll abhängig vom Wert - pos. oder neg. - blau oder rot gefärbt werden (die Schrift oder der Zellhintergrund).
Dazu habe ich in die Zelle den Function-Aufruf „= textattribut(„G16“)“ geschrieben, mit G16 die Zelle, in der steht.
kann natürlich mit der Formatierung rot oder blau gemacht werden. Nur für die Anpassung der Zelle daneben habe ich noch nichts gefunden. Den Text selbst kann ich ja mit der WENN-Funktion ändern. Ginge das auch für die Attribute?
Habe bisher nichts gefunden und daher eine Function geschrieben:
Function textattribut(zahlenwert)
If zahlenwert\> 0 Then
textattribut = "text\_1"
Sheets("Übersicht").Cells(8, 17).Font.ColorIndex = 52
Else
If zahlenwert = 0 Then
textattribut = ""
Else
textattribut = "text\_2"
Sheets("Übersicht").Cells(8, 17).Font.ColorIndex = 49
End If
End If
End Function
Ganz simple Sache also, nur 'ne kleine Spielerei.
Die Zeilen
Sheets("Übersicht").Cells(8, 17).Font.ColorIndex = 52
habe ich mal testweise rein geschrieben, bewirken aber nichts, was zu deiner obigen Aussage passt.
Gruss
Laika
Moin Reinhard,
schau mal in meine Antwort an Thomas, da ist’s genau beschrieben.
Laika
Hallo Laika,
Das funktioniert sowohl mit einer Sub wie mit einer Function -
bei letzterer aber nur dann, wenn diese nicht aus einer Zelle
im Tabellenblatt aus aufgerufen wird.
Genau das will ich aber machen.
*sehr grins* Ähem, nur so, völlig grundlos *lüch*
Nochmal, eine Funktion die in einer Zelle steht/aufgerufen wird, kann keine anderen Zellen ändern.
In Vba gestartet kann eine Funktion dies, siehe nachstehenden Code.
Mit bed. Formatierung kannst du auf Inhalte beliebiger Zellen „reagieren“.
Wenn „Zahl“ in D5 steht und je nach D5 (pos/neg) soll X5 anders farblich aussehen, nimmst du für X% die bed. Formatierung. mit zwei Bedingungen
Formel1: =D5>=0
Formel2: =D5Sub Test()
Dim N
N = ZelleAendern
End Sub
Function ZelleAendern()
Range(„C16“).Value = „Huhu“
End Function
Hallo,
*sehr grins* Ähem, nur so, völlig grundlos *lüch*
???
Nochmal, eine Funktion die in einer Zelle steht/aufgerufen
wird, kann keine anderen Zellen ändern.
Will ich auch nicht. Ich will die Attribute der Zelle ändern, aus der heraus die Function aufgerufen wird.
Sub Test()
Dim N
N = ZelleAendern
End SubFunction ZelleAendern()
Range(„C16“).Value = „Huhu“
End Function
Value ändern … kein Problem, aber die Attribute wie z.B. Hintergrundfarbe. Und ich will nicht absolut adressieren. Kann doch nicht so schwer sein. Sonst würde meine (noch) gute Meinung über Excel und VBA doch arg ramponiert.
Laika
Grüezi Laika,
Das funktioniert sowohl mit einer Sub wie mit einer Function -
bei letzterer aber nur dann, wenn diese nicht aus einer Zelle
im Tabellenblatt aus aufgerufen wird.Genau das will ich aber machen.
Ja, ich weiss, dass Du das machen willst - aber eben genau das geht nicht.
Daran können wir nichts ändern, das ist in Excel so festgelegt.
Lies dir bitte den vorhin genannten KB-Artikel in aller Ruhe durch; dann können/werden wir uns über Alternativen zu deinem Wunsch unterhalten.
Mit freundlichen Grüssen
Thomas Ramel
Was ganz krummes als Denkanstoß
Hallo Laika,
ich habe hier mal was gebastelt:
Public Function farbe(f As Integer) As Integer
Dim i As Integer
SendKeys "^1"
SendKeys "m"
SendKeys "{TAB}"
For i = 1 To f
SendKeys ("{RIGHT}")
Next i
SendKeys " "
SendKeys "{ENTER}"
farbe = f
End Function
Bei mir (Excel97) färbt die Funktion die Zelle ein. f ist dabei die „Nummer“ der Farbe, die du haben möchtest. „Nummer“ heißt hier: Wenn du im Format-Dialog für Zellen den Reiter „Muster“ aufrufst, und die Farbkästchen durchzählst. Ich weiß, dass ist jetzt blöd ausgedrückt, aber ich weiß momentan nicht, wie ich das besser erklären soll.
Weitere Bedingung, damit es funktioniert ist, dass die Markierung nach dem Drücken der Eingabetaste nicht verschoben wird (Extas - Optionen - Bearbeiten).
Wie gesagt, das ist nur ein schneller Versuch gewesen. Vielleicht kannst du ja was damit anfangen.
Gruß, Andreas
Danke Andreas, …
… interessante Sache, aber da werden die Attribute der ActiveCell geändert. Und die kann irgendwo sein, ist nie dort, wo die Function aufgerufen wird. Aber genau diese aufrufende Zelle will ich ändern …
Morgentlichen Gruß
Laika
Hallo Laika,
ich dachte du wolltest die Attribute der Zelle ändern, in die du die Formel eingibst. Und das ist doch die ActiveCell.
Wenn du eine andere Zellen ändern willst, müsstest du vorher noch über weitere SendKeys die gewünschte Zelle ansteuern, irgendwie so (nicht getestet):
SendKeys "^g"
SendKeys "B17{ENTER}"
Gruß, Andreas
Public Function farbe(f As Integer) As Integer
Dim i As Integer
SendKeys „^1“
SendKeys „m“
SendKeys „{TAB}“
For i = 1 To f
SendKeys ("{RIGHT}")
Next i
SendKeys " "
SendKeys „{ENTER}“
farbe = f
End Function
Hallo Andreas,
gute idee, aber ich nehme an, wie immer wegen SendKeys, nicht stabil genug.
Schreib mal in A1
=farbe(zeile())
und kopiere es runter bis A56.
Dann kommt da eine Einheitsfarbe heraus.
Übrigens klappt dein Code auch in XL2000.
Gruß
Reinhard
Hallo Reinhard,
ich weiß, du hast Recht. SendKeys ist immer eine heikle Sache. Es war auch nur so eine Schnapsidee von mir. Wollte nur mal sehen, ob man die Excel-Einschränkungen damit austricksen könnte. Es sollte ja auch nur „Was ganz krummes als Denkanstoß“ sein.
Gruß, Andreas