VBA-Code mit unterschiedlichen Werten ansprechen

20/01/2010 - 18:42 von Frank Vellner | Report spam
Liebe NG,

ich habe in einem Sheet 3 Buttens die mit 3 Makros verknüpft sind.
Jeder Nutzer klickt auf seinen Namen und dann bekommt der eingetragene
Wert eine bestimmte Farbe zugewiesen (und einiges mehr).

Nun kann man ja sicherlich die Sache so àndern, dass man nicht 3 mal
einen "fast" identischen Makro-Code (Unterschied nur in der letzten
Nummer der Zeile rngZelle.Font.ThemeColor = xlThemeColorAccent4)
pflegen muss, sondern direkt je nach geklicktem Button die
entsprechende Farbe genommen wird. Wie kann man das anstellen?

Und noch eine Frage zum Code unten. Der obere schöne Teil ist aus der
NG hier, der untere hàssliche mit "Selction" von mir ;-) Es wird ein
Eintrag nach rechts verschoben, sofern etwas in der Zelle ist. Das
möchte ich nun àndern: Es soll nach rechts verschoben werden, wenn das
Formelergebnis in der Zelle ein Datumswert ist.

Früher hatten die Zellen in Spalte L entweder keinen Inhalt oder einen
Datumswert. Jetzt steht in jeder Zelle die selbe Formel, die entweder
das Wort "Nix" (oder sonstwas) oder einen Datumswert zurückgibt.
Zusàtzlich sollen die Nutzer auch explizit Datumswerte eintragen können
(wenn sie die neue Formel-Funktionalitàt nicht nutzen möchten).

Meine ersten Experimente mit "If IsDate(rngZelle)" statt "If Not
IsEmpty(rngZelle)" sind schonmal gescheitert. Vieleicht ist der ganze
Ansatz schon Quatsch?

Sub nach_rechts_verschieben1()
Dim lngLR As Long
Dim rngZelle
Selection.AutoFilter
lngLR = Range("L" & Rows.Count).End(xlUp).Row
For Each rngZelle In Range("L10:L" & lngLR)
If Not IsEmpty(rngZelle) Then
rngZelle.Font.ThemeColor = xlThemeColorAccent4
rngZelle.Insert shift:=xlToRight
End If
Next

Cells.FormatConditions.Delete
Columns("M:M").Select
Selection.FormatConditions.Add Type:=xlExpression,
Formula1:="=M1-A1>N1"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Columns("N:N").Select
Selection.FormatConditions.Add Type:=xlExpression,
Formula1:="=N1-A1>O1"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("L10").Select
Selection.AutoFilter
End Sub


Viele Grüße
Frank
 

Lesen sie die antworten

#1 Andreas Killer
20/01/2010 - 19:32 | Warnen spam
Frank Vellner schrieb:

ich habe in einem Sheet 3 Buttens die mit 3 Makros verknüpft sind. Jeder
Nutzer klickt auf seinen Namen und dann bekommt der eingetragene Wert
eine bestimmte Farbe zugewiesen (und einiges mehr).

Nun kann man ja sicherlich die Sache so àndern, dass man nicht 3 mal
einen "fast" identischen Makro-Code (Unterschied nur in der letzten
Nummer der Zeile rngZelle.Font.ThemeColor = xlThemeColorAccent4) pflegen
muss, sondern direkt je nach geklicktem Button die entsprechende Farbe
genommen wird. Wie kann man das anstellen?


Du könntest einfach den User abfragen, der làßt sich ja in den
Excel-Optionen einstellen. Oder Du nimmst den Windows-Login.

Function WindowsUserName() As String
'Liefert den Windows-Login-Namen des Users
WindowsUserName = Environ$("USERNAME")
End Function

Function ExcelUserName() As String
'Liefert den Usernamen der in Excel eingetragen ist
ExcelUserName = Application.UserName
End Function

Und noch eine Frage zum Code unten. Der obere schöne Teil ist aus der NG
hier, der untere hàssliche mit "Selction" von mir ;-) Es wird ein
Eintrag nach rechts verschoben, sofern etwas in der Zelle ist. Das
möchte ich nun àndern: Es soll nach rechts verschoben werden, wenn das
Formelergebnis in der Zelle ein Datumswert ist.


...
Meine ersten Experimente mit "If IsDate(rngZelle)" statt "If Not
IsEmpty(rngZelle)" sind schonmal gescheitert. Vieleicht ist der ganze
Ansatz schon Quatsch?


Nö, genau so geht das, wieso sollte das nicht gehen? Probier das mal
so aus und schreib in A1 verschiedene Werte:

Sub Test()
MsgBox IsDate(Range("A1"))
End Sub

Sub nach_rechts_verschieben1()


Das Select/Selection làßt sich einfach entfernen, àndere

Columns("M:M").Select


zu
with Columns("M:M")
und schreibe vor die nàchste Zeile mit einem Select
end with

Nun markierst Du den Text dazwischen und ersetzt "Selection" durch ""
via Suche/Ersetze. Dadurch wird z.B.
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority


zu
.FormatConditions(.FormatConditions.Count).SetFirstPriority

Andreas.

Ähnliche fragen