Offset

Bild

Betrifft: Offset
von: Roman
Geschrieben am: 03.06.2015 09:09:09

Hallo zusammen
Ich habe folgendes Problem das ich gerne mit einem Makro lösen möchte.
Für ein Wartungsplan hätte ich gerne beim Eintrag eines Datums in eine Zelle einen neuen Vorschlag für den nächsten Wartungstermin.
Wenn ein Datum in eine Zelle einer Zeile eingetragen wird soll die Zelle grün hinterlegt werden und eine weitere Zell mit einem Offset, rot und mit Text “Wartung“ ausgefüllt werden.
Der Offsetwert wird in Zelle A1 eingetragen als “W“ für wöchentlich (Offsetwert= 1),“M“ für monatlich (Offsetwert=4)
Folgendes habe ich bereits versucht komme aber nicht weiter

If Range("A1").Value = "M" Then Range("A1:IV1").End(xlToRight).Offset(0, 4).Select
With Selection.Interior
.Color = 255
End With
ActiveCell.Select
'ActiveCell.FormulaR1C1 = "Wartung"
Das ganze müsste natürlich über mehrere Zeilen einer ganzen Tabelle funktionieren.
Gruss Roman

Bild

Betrifft: AW: Offset
von: Bastian
Geschrieben am: 03.06.2015 09:29:58
Hallo Roman,
probier mal den folgenden Code aus:
Der Code gehört in das Codefenster des entsprechenden Tabellenblattes (Rechtsklick auf Register des Tabellenblattes und dann "Code anzeigen" wählen):

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strIntervall As String
If IsDate(Target.Value) Then
    Application.EnableEvents = False
    
    strIntervall = Range("A1").Value
    
    Select Case strIntervall
    
        Case "W"
        Target.Offset(0, 1).Value = "Wartung"
        Target.Offset(0, 1).Interior.Color = 255
        
        Case "M"
        Target.Offset(0, 4).Value = "Wartung"
        Target.Offset(0, 4).Interior.Color = 255
    
    End Select
    
    Application.EnableEvents = True
End If
End Sub
Gruß, Bastian

Bild

Betrifft: AW: Offset
von: Roman
Geschrieben am: 03.06.2015 12:27:57
Hallo Bastian
Erstmal danke für die Hilfe.
Grundsätzlich funktioniert der Code. Vergessen zu erwähnen habe ich dass, das Offset immer von zuletzt eingegebenen Wert (Datum wenn die Wartung gemacht wurde) dazu gezählt wird uns so das neue Datum für die nächste Wartung vorgiebt. Schön wäre auch wenn das eingegebene Datum grün, als erledigt, hinterlegt wird.
Weiter ändert sich der Offsetwert bei jeder Zeile, in der ersten Zeile ist es A1 in der Zweiten A2 usw.
Gruss Roman

Bild

Betrifft: AW: Offset
von: Bastian
Geschrieben am: 03.06.2015 14:29:13
Hallo Roman,
Deinen Wunsch mit der Grünfärbung der Datums- Zelle und der Zeilenweisen Vorgabe des Wartungsintervalls ist leicht zu erfüllen:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strIntervall As String
If IsDate(Target.Value) Then
    Application.EnableEvents = False
    
    strIntervall = Cells(Target.Row, 1).Value
    Target.Interior.Color = 5287936
    
    Select Case strIntervall
    
        Case "W"
        Target.Offset(0, 1).Value = "Wartung"
        Target.Offset(0, 1).Interior.Color = 255
        
        Case "M"
        Target.Offset(0, 4).Value = "Wartung"
        Target.Offset(0, 4).Interior.Color = 255
    
    End Select
    
    Application.EnableEvents = True
End If
End Sub
Aber was Du mit
"Vergessen zu erwähnen habe ich dass, das Offset immer von zuletzt eingegebenen Wert (Datum wenn die Wartung gemacht wurde) dazu gezählt wird uns so das neue Datum für die nächste Wartung vorgiebt."
meinst, erschließt sich mir noch nicht. Kannst Du es an einem Beispiel erläutern?
Gruß

Bild

Betrifft: AW: Offset
von: Roman
Geschrieben am: 03.06.2015 15:28:04
Im Prinzip ist es ganz einfach wenn ich eine monatliche Wartung vorgebe habe ich alle 4 Wochen eine Eintrag mit "Wartung", jetzt kann es aber sein das die Wartung 2 Woche später als geplant durchgeführt wurden und sich somit alle Folgetermine um diese Woche nach hinten schieben. Das effektive Datum an der die Wartung gemacht wurde wird in die Tabelle eingetragen als Bestätigung der Wartung.
Das Problem aber wenn zb. die Wartung in KW22 stat wie gepant in KW20 durchgeführt wurde bleibt die Vorgabe "Wartung" auf KW20 bestehen müsste aber wider raus. Das heisst vor dem letzten eingetragenen Datum sind Wartungsintervalle in Abständen von 4 Wochen zu sehen und hinter dem letzten eingetragenen Datum nur grüne Felder mit den effektiven Wartungsdatum.

Bild

Betrifft: AW: Offset
von: Bastian
Geschrieben am: 08.06.2015 09:11:39
Hallo Roman,
ich hoffe, ich habe Dich richtig verstanden. Versuch es mal mit dem folgenden Code:
Wird ein Datum eingetragen, werden zunächst alle "Wartungs- Einträge" in der entsprechenden Zeile gelöscht. Dann wird der neue "Wartungs- Eintrag" eingetragen.
Gruß, Bastian

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strIntervall As String
Dim rngZelle As Range
If IsDate(Target.Value) Then
    For Each rngZelle In Cells(Target.Row, 1).EntireRow.SpecialCells(xlCellTypeConstants)
        If rngZelle.Value = "Wartung" Then
            rngZelle.ClearContents
            With rngZelle.Interior
                .Pattern = xlNone
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
        End If
    Next rngZelle
    
    Application.EnableEvents = False
    
    strIntervall = Cells(Target.Row, 1).Value
    Target.Interior.Color = 5287936
    
    Select Case strIntervall
    
        Case "W"
        Target.Offset(0, 1).Value = "Wartung"
        Target.Offset(0, 1).Interior.Color = 255
        
        Case "M"
        Target.Offset(0, 4).Value = "Wartung"
        Target.Offset(0, 4).Interior.Color = 255
    
    End Select
    
    Application.EnableEvents = True
End If
End Sub


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Formel Suchen mit Sternchen"