Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1184to1188
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Exel Kalender abgleichen

Exel Kalender abgleichen
beat
Hallo zusammen
Ich möchte zwei Excel Kalender synchronisieren, komme aber nicht richtig weiter und wäre deshalb sehr froh über ein paar Tipps.
Ich habe zwei Mappen mit Kalendern (Abwesenheiten und Planung, siehe Beispiel)). Der primäre Kalender ist die Planung. Wenn ich dort an einem bestimmten Tag einen Code eintrage (z.B. eine 1 in F10) bedeutet das dass die entsprechende Person am 5. Februar abwesend ist. Nach der Eingabe soll dieser Eintrag automatisch im Kalender Planung eingetragen werden, wobei dort die Anzahl und Reihenfolge der Personen anders sein kann. Da ich dort vor dem Eintrag prüfen möchte, ob schon ein Eintrag vorhanden ist und wenn ja welcher, und danach das Feld entsprechend farbig darstellen möchte (mehr als 3 Farben) funktioniert das Ganze wohl nur mittels VBA.
Mein Problem ist: wie kommt der Eintrag im Kalender Abwesenheiten automatisch in die richtige Position im Kalender Planung.
Für ein paar Tipps wäre ich sehr dankbar.
Mit bestem Dank zum Voraus und freundlichen Grüssen
Beat
https://www.herber.de/bbs/user/72092.xls

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Exel Kalender abgleichen
29.10.2010 18:07:29
Christian
Hallo,
ein Ansatz:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strName$, lngStart&, vntName
strName = Cells(Target.Row, 3).Text
Select Case Target.Row
Case Is > 33: lngStart = 34
Case Is > 8: lngStart = 9
End Select
With Sheets("Abwesenheiten")
vntName = Application.Match(strName, .Cells(lngStart, 3).Resize(18), 0)
If Not IsError(vntName) Then
.Cells(vntName + lngStart - 1, Target.Column).Value = Target.Value
End If
End With
End Sub

Gruß
Christian
AW: Exel Kalender abgleichen
29.10.2010 18:44:39
Christian
Beat,
nach deinen Korrekturen in der Antwort an Franz:
setze den Code in das Modul des Tabellenblatts "Abwesenheiten".
Im Modul des Tabellenblatts "Planung" muss der Code gelöscht werden.
und ersetze
With Sheets("Abwesenheiten")

durch
With Sheets("Planung")
Gruß
Christian
Anzeige
AW: Exel Kalender abgleichen
29.10.2010 18:08:46
fcs
Hallo Beat,
es gibt noch ein paar offenen Fragen:
1. In welchem Blatt erden die Eingaben gemacht? In welchem Blatt soll das Makro den Namen und Tag suchen und dann weitere Aktionen (prüfen, vergleichen,anzeigen, eintragen etc.)? Daswird aus deiner Beschreibung leider nicht klar. Da ist bei den Aktionen (Eingabe und Eintragen) immer nur vom Blatt "Planung" die Rede.
2. Was soll passieren, wenn ein Name für den Eingaben gemacht werden im Monat des 2. Blatts noch nicht vorhanden ist?
Lösen kann man das Ganze, indem man im Eingabeblatt mit dem Changeereignis arbeitet, dass auf Eingaben in Zellen regiert. Dann werden Zeile und Spalte der geänderten Zelle und der Eingabewert in Variablen gespeichert.
Ebenso wird der Name in Spalte C der Zeile in eine Variable geschrieben.
Dann wird in Spalte C von der Eingabezeile nach Oben gesucht, bis die Zeile "Datum" gefunden wird.
Jetzt kann das Datum für das die Eingabe gemacht wurde in eine Variable gespeichert werden. Ebenso der Monat der Eingabe.
Jetzt beginnt die Suche im 2. Blatt.
1. Monat mit Änderung suchen
2. im Bereich mit den Namen unterhalb des Monats den gemerkten Namen suchen
3 In der Zeile mit dem gefundenen Namen die Zelle des geänderten Tages auswerten gemäß Entscheidungskriterien. ggf. mit Eintrag aus Eingabeblatt überschreiben und Zelle formatieren.
4. Wenn Name mit Änderung nicht gefunden im Monat, was dann tun?
Gruß
Franz
Eintrag am
Anzeige
AW: Exel Kalender abgleichen
29.10.2010 18:32:14
beat
Hallo Franz
Sorry, meine Beschreibung enthielt einen (nicht unwesentlichen) Fehler. Die Eingaben werden immer im Kalender Abwesenheiten gemacht. Die Namen im Kalender Abwesenheiten sind immer auch im Kalender Planung nur die Reihenfolge kann unterschiedlich sein.
Irgendwie steh ich auf dem Schlauch und schaff es nicht, einen Eintrag im Kalender Abwesenheiten mit dem Changeereignis in den Kalender Planung an die richtige Stelle zu übertragen.
Gruss
Beat
AW: Excel Kalender abgleichen-Danke Christian
29.10.2010 19:02:39
beat
Hallo Christian
Die Position ist zwar noch um eine Zeile verschoben, aber das sollte ich irgendwie hinkriegen.
Ganz herzlichen Dank für die schnelle und kompetente Antwort
Gruss
Beat
Anzeige
AW: Exel Kalender abgleichen
30.10.2010 05:53:42
fcs
Hallo Beat,
ich hatte auch schon begonnen, eine Lösung zu erstellen. Hier das fertige Produkt inklusive Wertabfrage und Zellformatierung.
Ich war bei meiner Programmierung davon ausgegangen, dass der Zeilenaufbau in den beiden Tabellenblättern nicht identisch ist. Deshalb ist die Suche nach der Zeile im Zielblatt etwas komplizierter gestaltet als bei Christian.
Mit meiner Version kannst du im Blatt "Abwesenheiten" auch mehrere Zellen ausfüllen, z.B. per Kopieren oder Auffüllen.
Gruß
Franz
'Code im Tabellen-Modul Blatt Abwesenheiten
Option Explicit
Private sName As String, dDatum As Date, vEintrag, vVorhanden, dMonat As Date
Private Zeile_A As Long, Spalte_A As Long
Private Zeile_P As Long, Spalte_P As Long
Private wks_Plan As Worksheet, wks_Abw As Worksheet, rZelle As Range
Private ZielZelle As Range
Private msgText As String, msgTitel As String
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zeile As Long
'Alle geänderten Zellen ändern
For Each rZelle In Target
Zeile_A = rZelle.Row
Spalte_A = rZelle.Column
Set wks_Abw = Worksheets("Abwesenheiten")
Set wks_Plan = Worksheets("Planung")
'Spalten-/Zeilenbereich in dem Eingaben geprüft werden sollen
If Spalte_A > 3 And Spalte_A  2 Then
'Wert in Spalte C der Eingabe Zeile prüfen
Select Case wks_Abw.Cells(Zeile_A, 3).Value
Case "" 'kein Eintrag (Name oder sonstiges) in Spalte C vorhanden
With wks_Abw.Cells(Zeile_A, 3)
'Prüfen, ob Leerzeile oberhalb oder unterhalb Monatszeile
If IsDate(.Offset(-2, 0)) Or IsDate(.Offset(-1, 0)) Or IsDate(.Offset(1, 0)) Then
'do nothing
Else
MsgBox "In Spalte C der Eingabezeile steht noch kein Name!", _
vbInformation + vbOKOnly
End If
End With
Case "Kalenderwoche", "Datum", "Wochentag"
'do nothing - Änderungen in Zeilen die nicht ins Zielblatt sollen
Case Else
If IsDate(wks_Abw.Cells(Zeile_A, 3).Value) Then
'do nothing - Zeile mit Monatsdatum
Else
'Eingabedaten merken/ermitteln
vEintrag = rZelle.Value
sName = wks_Abw.Cells(Zeile_A, 3).Value
Zeile = Zeile_A
Do Until wks_Abw.Cells(Zeile, 3) = "Datum"
Zeile = Zeile - 1
Loop
dDatum = wks_Abw.Cells(Zeile, Spalte_A).Value
dMonat = wks_Abw.Cells(Zeile, 3).Offset(-3, 0).Value
Call Eintragen
End If
End Select
End If
Next
Set wks_Plan = Nothing: Set wks_Abw = Nothing: Set rZelle = Nothing: Set ZielZelle = Nothing
End Sub
Private Sub Eintragen()
'Eingabe im Blatt "Plandaten" eintragen
Dim Zeile As Long, rSuchen As Range, rSuchbereich As Range
With wks_Plan
'Zeile mit Monatsdatum in Spalte C suchen
For Zeile = 1 To .Cells(.Rows.Count, 3).End(xlUp).Row
If IsDate(.Cells(Zeile, 3).Value) Then
If .Cells(Zeile, 3).Value = dMonat Then
'Bereich mit Namen für gefundenen Monat
With .Cells(Zeile, 3)
Set rSuchbereich = wks_Plan.Range(.Offset(5, 0), .Offset(23, 0))
End With
'Name suchen
Set rSuchen = rSuchbereich.Find(What:=sName, LookIn:=xlValues, lookat:=xlWhole)
If rSuchen Is Nothing Then
msgText = sName & " im Monat " & Format(dMonat, "MMMM") & " noch nicht vorhanden!"
msgText = msgText & vbLf & vbLf & "Name """ & sName & """ eintragen?"
If MsgBox(msgText, vbYesNo, "Neuer Name im Ziel-Monat") = vbYes Then
'Name eintragen
Zeile_P = .Cells(Zeile, 3).Offset(23, 0).End(xlUp).Row + 1
wks_Plan.Cells(Zeile_P, 3).Value = sName
Else
GoTo Beenden
End If
Else
Zeile_P = rSuchen.Row
End If
Spalte_P = Spalte_A
Set ZielZelle = wks_Plan.Cells(Zeile_P, Spalte_P)
'vorhandenen Wert einlesen
vVorhanden = ZielZelle.Value
'vorhandenen Wert prüfen
If IsEmpty(ZielZelle) Then
ZielZelle = vEintrag
Else
Select Case vVorhanden
Case "" 'Leerstring in Zelle
ZielZelle = vEintrag
Case Else
If fncMsgBox() = False Then GoTo Beenden
End Select
End If
Call Zielzelle_Formatieren
Exit For
End If
End If
Next
Beenden:
End With
End Sub
Private Function fncMsgBox() As Boolean
msgTitel = "Datum: " & Format(dDatum, "DD.MM.YYYY") & "  -  Name: " & sName
msgText = "Es ist schon ein Wert eingetragen" & vbLf
msgText = msgText & "    aktueller Wert: " & vVorhanden & vbLf _
& "    neuer Wert:      " & vEintrag & vbLf
msgText = msgText & "Soll alter Wert überschrieben werden?"
If MsgBox(msgText, vbQuestion + vbYesNo, msgTitel) = vbYes Then
ZielZelle.Value = vEintrag
fncMsgBox = True
Else
fncMsgBox = False
End If
End Function
Private Sub Zielzelle_Formatieren()
'Zielzelle Formatieren
With ZielZelle
Select Case .Value
Case ""
.Interior.ColorIndex = xlColorIndexNone
Case 1
.Interior.Color = 16711680 'vbBlue
Case 2
.Interior.Color = 65535 'vbGelb
Case 3
.Interior.Color = 16776960 'vbCyan
Case 4
.Interior.Color = 16711935 'vvbMagenta
Case Else
.Interior.ColorIndex = xlColorIndexNone
End Select
End With
End Sub

Anzeige
AW: Exel Kalender - Danke Franz . Super
30.10.2010 08:30:00
beat
Hallo Franz
Ganz herzlichen Dank, dass Du mir gleich eine Komplettlösung erstellt hast. Ich werde das Ganze nun ausführlich testen und ich bin mir sicher, dass das (ev. mit ein paar Anpassungen) auch funktioniert.
Nochmals herzlichen Dank für Deine Mühe.
Gruss
Beat

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige