AW: Dateneingabe im 3. Arbeitsblatt überwachen
26.10.2004 19:01:39
joachim
Hallo noch mal,
mein Problem könnte sein, dass ich die aktuelle Zellposition abfrage. Dabei werden zwar die in den Tabellen die daten ausgetauscht (weil verknüpft) aber dort lösen sie nicht das Changeereignis aus. Wie müsste ich den Code anpassen?
Vielen Dank schon mal.
Herzlichen Gruß
Joachim
Hier mein Code:
Public tmpMA As Variant 'gerade eingebene MAzahl
Public tmpZeit As Variant 'zur MAzahl gehörende Uhrzeit
Public aktColumn As Variant 'Spaltenindex der gerade eingebenen Zelle
Public aktRow As Variant 'Zeilenindex der gerade eingebenen Zelle
Public Msg As Variant
Public ZeitSpaltenIndex As Variant 'Spaltenindex der Spalte in der die Beginnzeiten der GS vermerkt sind
Public Planzeichen As Variant 'Abkürzung der Mitarbeiter im Plan
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Dim tmpStartZeile As Integer 'Variierende Zeilenindizes
'Dim tmpEndZeile As Integer
'Festlegungen
ZeitSpaltenIndex = 4
ActiveWorkbook.Names.Add Name:="LastChange", RefersToR1C1:=Target 'letzte aktive zelle
Zelle = Target.Address
'Indizees + Inhalt der Zelle der Letzten eingabe ermitteln
aktColumn = ActiveCell.Column
aktRow = ActiveCell.Row - 1 'zuletzt bearbeitete Zelle liegt eine Zelle über der jetzt aktiven
tmpMA = Cells(aktRow, aktColumn) 'gerade eingegebener Wert
tmpZeit = Cells(aktRow, ZeitSpaltenIndex) 'dazugehörige Zeit
'Test, ob doppelte Eingabe eines Mitarbeiters differenziert nach Wochentag
If aktRow > 7 And aktRow < 25 Then
Call TestDoppelte(8, 24)
ElseIf aktRow > 27 And aktRow < 30 Then
Call TestDoppelte(28, 29)
ElseIf aktRow > 32 And aktRow < 43 Then
Call TestDoppelte(33, 42)
ElseIf aktRow > 45 And aktRow < 52 Then
Call TestDoppelte(46, 51)
ElseIf aktRow > 54 And aktRow < 60 Then
Call TestDoppelte(55, 59)
End If
End Sub
'Unterfunktion zum Testen auf doppelte Mitarbeiter mit TestStart- und TestEndeZeile als Parameter
Function TestDoppelte(ByVal StartZeile As Integer, ByVal EndZeile As Integer)
For RowIndex = StartZeile To EndZeile
If ActiveSheet.Cells(RowIndex, aktColumn).Value "" And ActiveSheet.Cells(RowIndex, aktColumn).Value "~~" And ActiveSheet.Cells(RowIndex, aktColumn).Value "S" And ActiveSheet.Cells(RowIndex, aktColumn).Value "F" Then
If ActiveSheet.Cells(RowIndex, aktColumn).Value = tmpMA Then
If RowIndex aktRow Then 'Ausnahme, wenn die Schleife an der am aktuellen MA angekommen ist, beachten
If ActiveSheet.Cells(RowIndex, ZeitSpaltenIndex) = tmpZeit Then
Beep
Msg = MsgBox("Keine doppelte Eingabe möglich! aktueller MA:" & ActiveSheet.Cells(RowIndex, aktColumn).Value & " Spalte:" & aktColumn & " Zeile" & RowIndex, vbRetryCancel, "Nana, Herr Planbearbeiter!")
If Msg = vbRetry Then ' Benutzer hat "Ja" gewählt.
If Merk "" Then Range(Merk).Interior.ColorIndex = xlNone 'markiert zuletzt bearbeitete Zelle
Merk = Zelle
Range(Zelle).Interior.ColorIndex = 7
Range(Zelle).Activate
Application.OnTime Now + TimeValue("00:00:03"), "ZellNormal"
Else ' Benutzer hat "Nein" gewählt.
MsgBox ("JA") ' Nur zur Kontrolle.
End If
End If
End If
End If
End If
Next
End Function