Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: nach aktualisierung funktioniert Formel nicht mehr

nach aktualisierung funktioniert Formel nicht mehr
Angelika
Hallo
Ich benötige bitte dringend nochmal Hilfe.
Tabelle hab ich beigefügt
https://www.herber.de/bbs/user/79253.xlsm
Code siehe unten
Kurze Erklärung
In Tabelle Daten1 werden in Spalte K40:T40 manuell Werte eingegeben
Dank Hilfe vom Forum geschieht nun folgendes:
Es wir überprüft ob Spalte „K“ leer ist wenn nicht macht er nach einer vorgegebenen Formel ( siehe Code ) in Spalte V ein „X“ .
Ebenfalls per Code hinterlegt ist dass wenn in den Spalten N:S ein Wert steht wird diese farblich hinterlegt.
Wenn ich nun meinen Button „ARCHIVIEREN“ drücke werden die Zeilen die in Spalte V ein „X“ haben
In das Tabellenblatt Archiv verschoben.
Also ich habe zwei Varianten ausprobiert Zeile löschen/Zeileninhalt löschen.
Anschliessend wird die Tabelle ab Spalte K nach dem Wert in Spalte N sortiert.
Und es werden bis zur Zeile 500 neue Rahmen gesetzt.
JETZT MEIN PROBLEM
Wenn ich Zeilen archiviert habe – werden die Zellen N:T nicht mehr farblich hinterlegt.
WARUM?
Private Sub Worksheet_Change(ByVal Target As Range)
Set RaBereich = Range("n40:n500, q40:q500")
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If Not RaBereich Is Nothing Then
For Each RaZelle In RaBereich
With RaZelle
Select Case UCase(.Value)
Case Is > "0"
' Füllfarbe rot
.Interior.Color = 255
' Schriftfarbe schwarz
.Font.Color = 0
' Zellenformat tag monat jahr
'.NumberFormat = "dd.mm.yyyy"
'.Font.Bold = True
Case Else
' keine Füllfarbe
.Interior.ColorIndex = xlNone
' Schriftfarbe automatisch
' .Font.ColorIndex = xlAutomatic
' Zellenformat Standard
'.NumberFormat = "General"
End Select
End With
Next RaZelle
'ActiveSheet.protect ("Passwort")
'End If
Set RaBereich = Nothing                 ' Variable leeren
Exit Sub
End If
Set RaBereich = Range("o40:o500, r40:r500")
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If Not RaBereich Is Nothing Then
For Each RaZelle In RaBereich
'or Each RaZelle In RaBereich
With RaZelle
Select Case UCase(.Value)
Case Is > "0"
' Füllfarbe Orange
.Interior.Color = 65535
' Schriffarbbe schwarz
.Font.Color = 0
' Zellenformat Standard
.NumberFormat = "dd.mm.yyyy"
Case Else
' keine Füllfarbe
.Interior.ColorIndex = xlNone
' Schriftfarbe automatisch
.Font.ColorIndex = xlAutomatic
' Zellenformat Standard
.NumberFormat = "General"
End Select
End With
'Next RaZelle
'ActiveSheet.protect ("Passwort")
Next RaZelle
Set RaBereich = Nothing                 ' Variable leeren
Exit Sub
End If
Set RaBereich = Range("p40:p500, s40:s500")
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If Not RaBereich Is Nothing Then
For Each RaZelle In RaBereich
'or Each RaZelle In RaBereich
With RaZelle
Select Case UCase(.Value)
Case Is > "0"
' Füllfarbe Gelb
.Interior.Color = 5287936
' Schriffarbbe schwarz
.Font.Color = 0
' Zellenformat Standard
.NumberFormat = "dd.mm.yyyy"
Case Else
' keine Füllfarbe
.Interior.ColorIndex = xlNone
' Schriftfarbe automatisch
.Font.ColorIndex = xlAutomatic
' Zellenformat Standard
.NumberFormat = "General"
End Select
End With
'Next RaZelle
'ActiveSheet.protect ("Passwort")
Next RaZelle
Set RaBereich = Nothing                 ' Variable leeren
Exit Sub
End If
'

Private Sub Worksheet_Change(ByVal Target As Range)
'neu-Anfang
i = 0
Application.EnableEvents = False    ' Ereignisbehandlung ausschalten
'Anzahl ausgefüllte Zeilen in Spalte K ermitteln
With ActiveSheet
Do Until .Range("K40").Offset(i, 0) = ""
i = i + 1
Loop
If i > 0 Then
'Formeln in Spalte V einfügen
'Formel hier in der loalen Sprache/Syntax einfügen
' .Range(.Range("z40"), .Range("z40").Offset(i - 1, 0)).FormulaLocal = _
'    "=WENN(UND(R40=""X"";S40="""");""X"";WENN(UND(R40=""X"";W40=""X"");""X"";" _
'   & "WENN(UND(R40=""X"";S40=""X"");"""";)))"
'oder so - in VBA-Sprache - international US-(englisch) in R1C1-Schreibweise
.Range(.Range("V40"), .Range("V40").Offset(i - 1, 0)).FormulaR1C1 = _
"=IF(AND(RC[-6]>1,RC[-5]=""""),""X"",IF(AND(RC[-6]>1,RC[-3]>1),""X"",IF(AND(RC[-6] _
>1,RC[-5]>1),"""",)))"
'Formeln in Spalte W einfügen
'.Range(.Range("W40"), .Range("W40").Offset(i - 1, 0)).FormulaR1C1 = _
'  "=IF(R[0]C[-1]=""X"",Focus1!R23C44, """")"
Exit Sub
Application.EnableEvents = True    ' Ereignisbehandlung einschalten
'neu-Ende
End If
End With
End Sub
Private Sub CommandButton1_Click()
Call Archivieren
End Sub

Private Sub Archivieren()
' ActiveSheet.Unprotect    'Blattschutz aufheben
' Aus Tabelle Daten1 die zu archivierenden Datensätze in Tabelle Archiv verschieben
Dim bereich As Range, Zeilen As Object, Zähler As Long
Dim Zelle As Range, i As Long, ziel As Range, Arr As Variant
Set Zeilen = CreateObject("Scripting.Dictionary")
Set bereich = Me.Range("v40:v" & Me.Range("v" & Rows.Count).End(xlUp).Row)
For Each Zelle In bereich.Cells
If LCase(Zelle.Text) = LCase("X") Then
Set Zeilen(Zähler) = Zelle.Offset(0, 11 - Zelle.Column).Resize(1, 23)
Zähler = Zähler + 1
End If
Next Zelle
If Zähler = 0 Then Exit Sub
Zähler = Zähler - 1
Set ziel = Sheets("Archiv").Range("A65536").End(xlUp).Offset(1, 0)
Application.ScreenUpdating = False
'Werte übertragen
For i = 0 To Zähler
Arr = Zeilen(i).Value
ziel.Resize(1, Zeilen(i).Cells.Count).Value = Arr
Set ziel = ziel.Offset(1, 0)
Next i
'Werte löschen
For i = Zähler To 0 Step -1
Zeilen(i).EntireRow.Delete
Next i
Application.EnableEvents = True    ' Ereignisbehandlung einschalten
Zeilen.RemoveAll
'sortiert Daten1 ab zeile 40
ActiveSheet.Range("K40:W500").Select
Selection.Sort Key1:=ActiveSheet.Range("N40"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("K40:W200").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Exit Sub
End Sub

Vielleicht kann mir jemand helfen.
Angelika
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: nach aktualisierung funktioniert Formel nicht mehr
07.03.2012 14:53:58
Angelika
Ich habs gefunden
ich muss vor dem letzten End With folgendes einsetzen
Application.ScreenUpdating = True
AW: nach aktualisierung funktioniert Formel nicht mehr
07.03.2012 15:00:59
Angelika
Ich hab noch ne Frage,
wie muss ich den VBA Code Worksheets Change erweitern wenn ich die Formel
=WENN(K40="";"";SUMMEWENN(N40:S40;">0";$N$39:$S$39)*100))
per VBA verwenden will
Danke im voraus für jede Hilfe
Angelika
Anzeige
funktioniert leider doch nicht
07.03.2012 15:05:28
Angelika
Frage bitte noch als offen bearbeiten
Ich weiß auch nicht woran es liegt. es geht wohl doch nicht
Danke Angelika
AW: funktioniert leider doch nicht
08.03.2012 14:51:31
Angelika
Schliesse diese Frage
Angelika
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige