89 Aufrufe
Gefragt in Tabellenkalkulation von zagor Mitglied (166 Punkte)
Bearbeitet von zagor

Folgender Code  befindet sich in 10 Arbeitsblättern (fiktive Namen) "Abt. Montag", "Abt. Dienstag" ,"Abt. Mittwoch", "Abt. Donnerstag", "Abt. Freitag", "Abt. Samstag", "Abt. Sonntag", "Abt. Januar", "Abt. März", "Abt. Juni".

Private Sub UpdateCells(ByVal row As Integer, ByVal col As Integer)
    On Error Resume Next    
    Dim i As Integer

    ' Starte eine Schleife, die die nächsten fünf Spalten durchläuft
    For i = col + 1 To col + 5      
        Dim result As Variant

        ' SVERWEIS-Funktion , um einen Wert in einem bestimmten Bereich des Arbeitsblatts "Stammdaten" zu suchen
        result = Application.WorksheetFunction.VLookup(Me.Cells(row, col), Worksheets("Stammdaten").range("C:OG"), Me.Cells(2, i).Value + Me.Cells(row, 3).Value, False)

        ' Wenn ein Fehler auftritt...
        If Err.Number <> 0 Then

            ' Setze den Wert der Zelle (row, i) auf einen leeren String
            Me.Cells(row, i).Value = ""
            Err.Clear
        Else

            ' Wenn das Ergebnis größer als 0 ist...
            If result > 0 Then

                ' Setze den Wert der Zelle (row, i) auf Ergebnis
                Me.Cells(row, i).Value = result

            ' Wenn Ergebnis nicht größer als 0 ist...
            Else

                ' Setze den Wert der Zelle (row, i) auf einen leeren String
                Me.Cells(row, i).Value = ""
            End If
        End If
    Next i

    On Error GoTo 0
End Sub

Der Code reagiert auf Ereignisse in den Arbeitsblättern.

Aber der Code reagiert auf das Ereignis in "Stammdaten" nicht. Angenommen; Madonna arbeitet in der "Abt. Freitag" , und ist heute Krank = "K". Das Ereignis aus dem Arbeitsblatt "Stammdaten" wird in der "Abt. Freitag" erst danach angezeigt, wenn Madonna um eine Zelle verschoben wird. 

Wie könnte ich das Problem lösen ?

Welche Informationen braucht ihr um mir helfen zu können?

Bedanke mich im Voraus für die Unterstützung. 



1 Antwort

0 Punkte
Beantwortet von zagor Mitglied (166 Punkte)

Was ich bisher versucht habe :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Columns("A")) Is Nothing Then
        Dim row As Integer
        row = Target.Row
        Sheets("Abt. Freitag").Activate
        Call UpdateCells(row)
    End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WatchRange As Range
    Set WatchRange = Me.Range("S12:OG581")
  If Not Application.Intersect(WatchRange, Range(Target.Address)) Is Nothing Then
        Call UpdateCells(ThisWorkbook.Sheets("Abt. Freitag"), Target.Row, Target.Column)
    End If
End Sub

...