AW: teilausgefüllte Zeilen eín- und ausblenden
27.10.2014 12:41:31
fcs
Hallo Holm,
das Makro entwickelt sich langsam zu einem Roman.
Formel in H2 zur Berechnung der Anzahl Verpackungen:
=WENN(BEREICH.VERSCHIEBEN(E2;-1;0)=E2;"";SUMMENPRODUKT((E2=$E$2:$E$149)*$C$2:$D$149))
Die 149 in der Formel musst du entsprechend der Zeilenzahl in deiner Liste anpassen. Diese Formel dann in Spalte H kopieren.
Denke auch daran, das du im Worksheet_Change-Makro die Nummer der Spalte anpassen musst, in die Datum-Zeit eingetragen werden.
Gruß
Franz
'Makro unter dem Tabellenblatt mit den Eingaben
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Zeile As Long
Dim Statuscalc As Long
Select Case Target.Column
Case 1 'Spalte A
If MsgBox("In Zeile " & Target.Row & " Werte außer Paletten-Nr. löschen?", _
vbQuestion + vbOKCancel + vbDefaultButton2, _
"Inhalte in Zeile löschen") = vbOK Then
'Makrobremsen lösen
With Application
.EnableEvents = False
Statuscalc = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
'In Zellen mit Werten außer Palletten-Nr. den Inhalt löschen
With Cells(Target.Row, 1)
.Offset(0, 0).ClearContents
.Offset(0, 2).ClearContents
.Offset(0, 3).ClearContents
.Offset(0, 5).ClearContents
.Offset(0, 6).ClearContents
.Offset(0, 8).ClearContents
End With
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.Calculation = Statuscalc
.ScreenUpdating = True
End With
Cancel = False
End If
Case 5 'Spalte E
If Target.Row > 1 Then
'Makrobremsen lösen
With Application
.EnableEvents = False
Statuscalc = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
If Target.Offset(-1, 0).Value = Target.Value Then
'Prüfen, ob außer Paletten-Nr. und Formeln ander Zellen ausgefüllt sind
If Application.WorksheetFunction.CountA(Range(Cells(Target.Row, 1), _
Cells(Target.Row, 6))) = 2 Then
'Neue Zeile mit Paletten-Nummer löschen
Target.EntireRow.Delete
Else
If MsgBox("Zeile " & Target.Row & " löschen?", _
vbQuestion + vbOKCancel + vbDefaultButton2, _
"Zeile löschen") = vbOK Then
'Zeile mit Inhalten löschen
Target.EntireRow.Delete
End If
End If
Cancel = True
ElseIf Target.Offset(-1, 0).Value Target.Value Then
'Leerzeile mit Palettennummer einfügen
Target.Offset(1, 0).EntireRow.Insert
Target.Offset(1, 0).Value = Target.Value
'Formel in Spalte B kopierem
Cells(Target.Row, 2).Copy Cells(Target.Row + 1, 2)
'Formel in Spalte H kopieren/neu erstellen
Zeile = Target.Row
If Zeile + 1 = Cells(Rows.Count, 2).End(xlUp).Row Then
'Neuer Eintrag am Ende der Liste - alle Formeln in H ab Zeile 2 neu erstellen
Range(Cells(2, 8), Cells(Zeile + 1, 8)).FormulaR1C1 = _
"=IF(OFFSET(RC[-3],-1,0)=RC[-3],"""",SUMPRODUCT((RC[-3]=R2C5:R" _
& Zeile + 1 & "C5)*R2C3:R" & Zeile + 1 & "C4))"
Else
'Formel in Spalte H kopieren
Cells(Zeile, 8).Copy Cells(Zeile + 1, 8)
End If
Cancel = True
End If
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.Calculation = Statuscalc
.ScreenUpdating = True
End With
End If
End Select
End Sub