Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
672to676
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
672to676
672to676
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Code "greift" nicht.

VBA Code "greift" nicht.
29.09.2005 07:49:03
Kay
Hallo zusammen,
in dem Tabellenbereich "DJ4:DQ150" stehen verschiedene Zeichen (T;K;G1;G2;S,M) in den einzelnen Zellen. Abhängig von dem jeweiligen Zeichen sollte nun die Zelle eingefärbt werden. Ähnlich wie bei der bedingten Formatierung - nur dass ich hier mehr Bedingungen habe.
Ich habe mir über goooogle ein VBA Script rausgesucht, was mich hierbei unterstützt, da ich in VBA leider keine großen Kentnisse habe. Mein Problem ist nun, dass sich die Zellen nicht (automatisch) färben. Die Zeichen in dem zellbereich werden über Formeln "generiert". Gebe ich jedoch ein Zeichen "manuell" ein, dann färbt sich die Zelle entsprechend.
Was machen ich falsch, wenn die Zellen sich auch eigenständig in Abhängigkeit des "Formelwertes" färben sollen?
Hajos VBA Code habe ich in ein Modul kopiert:

Sub Worksheet_Change(ByVal Target As Range)
'* H. Ziplies                                     *
'* 19.07.03, 30.10.03                             *
'* erstellt von Hajo.Ziplies@web.de               *
'* <a href="http://home.media-n.de/ziplies/">http://home.media-n.de/ziplies/</a> *
'   HINTERGRUND
'   für Schrift RaZelle.Font.ColorIndex
Dim RaBereich As Range, RaZelle As Range
' Bereich der Wirksamkeit
'Set RaBereich = Range("DJ4:DQ150")
'   noch mehr Bereiche
Set RaBereich = Union(Range("DJ4:DJ150"), Range("DK4:DK150"), Range("DL4:DL150"), Range("DM4:DM150"), Range("DN4:DN150"), Range("DO4:DO150"), Range("DP4:DP150"), Range("DQ4:DQ150"))
'   ab Vesion XP braucht der Schutz nicht aufgehoben werden
'   Formatierung bei Schutz kann über Dialog Schutz eingestellt werden
'    ActiveSheet.Unprotect ("Passwort")
For Each RaZelle In Range(Target.Address)
With Range(RaZelle.Address, RaZelle.Offset(0, 0).Address)
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
Select Case UCase(RaZelle.Value) ' UMWANDLUNG DER Eingabe in Großbuchstaben
Case "T"
.Interior.ColorIndex = 3
.Font.ColorIndex = 0
' Schriftfarbe automatisch
'.NumberFormat = "General"
' Zellenformat Standard
Case "K"
.Interior.ColorIndex = 6
.Font.ColorIndex = 0
' Schriftfarbe automatisch
'.NumberFormat = "General"
' Zellenformat Standard
Case "G1"
.Interior.ColorIndex = 4
.Font.ColorIndex = 0
' Schriftfarbe Weiß
'.NumberFormat = ";;;"
' nicht sichtbar
Case "G2"
.Interior.ColorIndex = 5
.Font.ColorIndex = 0
' Schriftfarbe Weiß
'.NumberFormat = ";;;"
' nicht sichtbar
Case "M"
.Interior.ColorIndex = 7
.Font.ColorIndex = 0
' Schriftfarbe Weiß
'.NumberFormat = ";;;"
' nicht sichtbar
Case "S"
.Interior.ColorIndex = 8
.Font.ColorIndex = 0
' Schriftfarbe Weiß
'.NumberFormat = ";;;"
' nicht sichtbar
Case Else
.Interior.ColorIndex = xlNone
' Keine
.Font.ColorIndex = 0
' Schriftfarbe automatisch
'.NumberFormat = "General"
' Zellenformat Standard
End Select
End If
End With
Next RaZelle
'    ActiveSheet.protect ("Passwort")
Set RaBereich = Nothing
End Sub

Danke für eucre Hilfe!
Kay.

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code "greift" nicht.
29.09.2005 08:31:22
Volker
Hallo Kay,
schreib das ganze Zeug mal ins Worksheet_Calculate-Ereignis, da das Worksheet_Change nicht bei neuberechneten Zellen, sondern nur bei händischen Änderungen ausgelöst wird.
Gruß
Volker
AW: VBA Code "greift" nicht.
29.09.2005 08:36:48
Kay
Hallo Volker,
vielen Dank für deine Antwort.
Kannst du mir genau sagen, wie ich das machen soll (...ich kenne mich in VBA leider nicht aus...)
Wenn ich einfach nur folgendes ändere, dann führt das leider nicht zum Erfolg:
Sub Worksheet_Calculate(ByVal Target As Range)
Muss ich noch mehr ändern oder den VBA-Code wo anders einfügen?
Danke für deine Hilfe,
Kay.
Anzeige
AW: VBA Code "greift" nicht.
29.09.2005 09:10:21
Volker
Hallo Kay, mal von vorne:
1. Du mußt das Ereignis nicht selbst erfinden, es ist mit Prozedurkopf und Ende im VBA-Editor vorgegeben.
2. Dieser Code gehört nicht in ein Modul, sonder unter das Objekt Tabelle
Wenn du im Editor links im Projektfenster eine Tabelle anklickst, steht im rechten Fenster, in den Auswahlboxen "allgemein" und "Deklarationen". Wähle statt "allgemein" "Worksheet" und im rechten Fenster können die Worksheet-Ereignisse ausgewählt werden. Der Name der Ereignisse ist fast schon selbsterklärend.
Einige Ereignisse haben Parameter wie z.B. das selection change: hier steht die Variable "Target" für den selektierten Bereich.
Das Calculate-Ereignis keine Parameter, wird aber ausgelöst, wenn eine Formel im Blatt neu berechnet wird, also genau was du brauchst.
Also den ganzen Code, natürlich ohne 1. und letzte Zeile in das Worksheet_Calculate() einfügen, der Rest sollte passen.
Noch ein paar hilfreiche Tips zum programmieren und debuggen:
-Du kannst mit einem Klick an den Rand neben dem Code Haltepunkte setzen, an denen die Ausführung stoppt.
-Mit F8 kannst du den Code zeilenweise durchlaufen
-Wenn du mit Cursor über eine Variable gehst, wird deren Wert angezeigt
Gruß
Volker
Anzeige
AW: VBA Code "greift" nicht.
29.09.2005 09:57:14
Kay
Hallo Volker,
vielen Dank für die Tips. Ich habe mich exakt an deine Anleitung gehalten, doch leider funktiert das noch immer nicht. Der Code steht unter dem Objekt Tabelle in der "Tabelle1". Oben steht Worksheet und Calculate. Wenn ich in meiner Tabelle F9 für die Neuberechnung drücke passiert leider gar nichts. Der Code sieht wie folgt aus:

Private Sub Worksheet_Calculate()
Dim RaBereich As Range, RaZelle As Range
Set RaBereich = Union(Range("DJ4:DJ150"), Range("DK4:DK150"), Range("DL4:DL150"), Range("DM4:DM150"), Range("DN4:DN150"), Range("DO4:DO150"), Range("DP4:DP150"), Range("DQ4:DQ150"))
For Each RaZelle In Range(Target.Address)
With Range(RaZelle.Address, RaZelle.Offset(0, 0).Address)
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
Select Case UCase(RaZelle.Value) ' UMWANDLUNG DER Eingabe in Großbuchstaben
Case "T"
.Interior.ColorIndex = 3
.Font.ColorIndex = 0
Case "K"
.Interior.ColorIndex = 6
.Font.ColorIndex = 0
Case "G1"
.Interior.ColorIndex = 4
.Font.ColorIndex = 0
Case "G2"
.Interior.ColorIndex = 5
.Font.ColorIndex = 0
Case "M"
.Interior.ColorIndex = 7
.Font.ColorIndex = 0
Case "S"
.Interior.ColorIndex = 8
.Font.ColorIndex = 0
Case Else
.Interior.ColorIndex = xlNone
.Font.ColorIndex = 0
End Select
End If
End With
Next RaZelle
Set RaBereich = Nothing
End Sub

Hast du vielleicht noch eine Idee?
Lieben Dank,
Kay.
Anzeige
AW: VBA Code "greift" nicht.
29.09.2005 10:27:20
Volker
So ganz ohne Eigenarbeit kommst du hier nicht davon ;-)
Ein bisschen mußt du dich schon mit dem Thema befassen. Von einer mundgerechten Lösung hast du gar nichts, wenn du mal was ändern möchtest und nicht weißt wo.
Ich hab den Code nicht getestet, darum waren da noch ein paar bugs drin:
Die Variable Target hat natürlich da natürlich, wie gesagt, nichts zu suchen.
Und dein Bereich ist nur Range("DJ4:DJ150") und nicht
Union(Range("DJ4:DJ150"), Range("DK4:DK150"), Range("DL4:DL150"), Range("DM4:DM150"), Range("DN4:DN150"), Range("DO4:DO150"), Range("DP4:DP150"), Range("DQ4:DQ150"))
Stimmts?
"If not intersect(irgendein Range,irgendein 2. Range) is nothing" prüft eine Überschneidung der Ranges
Mit "for each zelle in bereich" ist sichergestellt, dass ich nur Zellen des Bereiches bearbeite/abfrage. Die Intersect-Geschichte kann also entfallen.
Damit hast du sowas, mit vereinfachten Variablennamen:

Private Sub Worksheet_Calculate()
Dim bereich, zelle As Range
Set bereich = Range("DJ4:DJ150")
For Each zelle In bereich
With zelle
Select Case UCase(zelle) ' UMWANDLUNG DER Eingabe in Großbuchstaben
Case "T"
.Interior.ColorIndex = 3
.Font.ColorIndex = 0
Case "K"
.Interior.ColorIndex = 6
.Font.ColorIndex = 0
Case "G1"
.Interior.ColorIndex = 4
.Font.ColorIndex = 0
Case "G2"
.Interior.ColorIndex = 5
.Font.ColorIndex = 0
Case "M"
.Interior.ColorIndex = 7
.Font.ColorIndex = 0
Case "S"
.Interior.ColorIndex = 8
.Font.ColorIndex = 0
Case Else
.Interior.ColorIndex = xlNone
.Font.ColorIndex = 0
End Select
End With
Next zelle
Set bereich = Nothing
End Sub

Schau mal, ob es jetzt geht.
Gruß
Volker
Anzeige
AW: VBA Code "greift" nicht.
29.09.2005 10:57:10
Kay
Hallo Volker,
1000 Danke! Es klappt... Du warst mir eine riesen Hilfe.
Merkwürdig nur, dass ich das nicht schon vorher hinbekommen habe. Das mit dem Bereich hatte ich zuvor auch schon mal probiert (dachte ich)... naja, wie auch immer. Ich danke Dir.
Schönen Tag und lieben Gruß,
Kay.
AW: VBA Code "greift" nicht.
29.09.2005 11:01:57
Volker
Mach dir nichts draus, mit Range-Variablen stand ich bis vor kurzem auch noch auf Kriegsfuß.

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige