Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1236to1240
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

Urlaubstage übertragen

Urlaubstage übertragen
Ghostman
Ich steh grad völlig auf dem schlauch. Folgendes Problem:
Ich würde gerne aus Tabelle "Urlaub", aufgebaut als Jahreskalender d.h. in Zeile 7 steht das Datum und in Spalte A stehen die Namen, die "X" in die Tabelle "Aktueller Monat" übertragen lassen. Diese ist fast gleich aufgebaut d.h. Zeile 9 Datum für einen Monat Spalte A die gleichen Namen.
Das ganze als WVERWEIS in Tabelle "Aktueller Monat" zu machen ist kein Problem. Nur kann ich das ja nicht machen, da ich dort noch die Schichten eintragen muss und ich mir die Formel überschreiben würde.
Also brauche ich ein MAKRO das automatisch beim Aufrufen von "Aktueller Monat" läuft oder ich mach es über einen Button.
Ich habe es schon versucht den WVERWEIS über MAKRO aufzuzeichnen, aber dann scheitere daran das es ja nur immer für eine Zelle gilt.
Hoffe ich hab es einigermassen verständlich geschilder und es hat mir jemand einen Tipp oder einen Lösung für mein Problem.
Vielen Dank schon mal
Ghostman
AW: Urlaubstage übertragen
26.11.2011 14:01:53
fcs
Hallo Ghostman,
das Übertragen der "X" aus dem Urlaubsplan in den aktuellen Monat kann man mit folgendem Makro realiseren.
Gruß
Franz
Sub UrlaubMarkieren()
Dim wksUrlaub As Worksheet, wksAkt As Worksheet
Dim rngUrlaub As Range, rngNamen As Range, rngDatum As Range
Dim varName As Variant, varDatum As Variant, varWert As Variant
Dim Zeile As Long, Spalte As Long
Dim ZeileU As Variant, SpalteU As Variant
Set wksUrlaub = Worksheets("Urlaub")
Set wksAkt = Worksheets("Aktueller Monat")
'Datenbereiche im Blatt Urlaub ermitteln/festlegen ausgehend von Zelle A7
With wksUrlaub
Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row
Spalte = .Cells(7, .Columns.Count).End(xlToLeft).Column
Set rngUrlaub = .Range(.Cells(7, 1), .Cells(Zeile, Spalte))
Set rngNamen = .Range(.Cells(7, 1), .Cells(Zeile, 1))
Set rngDatum = .Range(.Cells(7, 1), .Cells(7, Spalte))
End With
With wksAkt
'Namen (Spalte A und Datum (Zeile9) im aktuellen Monat abarbeiten
For Zeile = 10 To .Cells(.Rows.Count, 1).End(xlUp).Row
varName = .Cells(Zeile, 1).Value
For Spalte = 2 To .Cells(9, .Columns.Count).End(xlToLeft).Column
varDatum = CLng(.Cells(9, Spalte).Value)
'Zeile zum Namen ermitteln
ZeileU = Application.Match(varName, rngNamen, 0)
'Spalte zum Datum ermitteln
SpalteU = Application.Match(varDatum, rngDatum, 0)
If IsNumeric(ZeileU) And IsNumeric(SpalteU) Then
varWert = Application.WorksheetFunction.Index(rngUrlaub, ZeileU, SpalteU)
With .Cells(Zeile, Spalte)
If UCase(varWert) = "X" Then
.Value = "X"
Else
.ClearContents
End If
End With
Else
.Cells(Zeile, Spalte).ClearContents
End If
Next
Next
End With
End Sub

Anzeige
AW: Urlaubstage übertragen
26.11.2011 15:57:15
Ghostman
Wow ... erst mal Danke die schnelle Antwort. Werde ich heute Abend gleich mal versuchen und dir Bericht erstatten.
Wie gesagt aber schon mal danke. So umfangreich hätte ich es mir nicht gedacht.
AW: Urlaubstage übertragen
26.11.2011 17:47:16
Reinhard
Hallo Ghostman,
naja, die Codelänge überrascht mich auch aber ich hab garnicht probiert zu coden.
Du sagst Jahres- und Monatskalender ist gleich aufgebaut bis auf unterschiedlichen zeilenbeginn.
Dann kopier doch einfach aus "Urlaub" rein, trage dann die Schichten ein!?
Gruß
Reinhard
AW: Urlaubstage übertragen
26.11.2011 19:50:36
Ghostman
Hallo Franz, Hallo Reinhard,
Franz erst noch mal ein Dankeschön an dich. Der Code funktioniert einwandfrei.... Haken an der sache... ich konnte in der Zeit in der er lief nicht nur den Kaffee holen sondern auch noch trinken. Sprich es läuft wahnsinnig lange. Zumindest bei mir.
Reinhard, das mit dem kopieren wäre nicht schlecht aber zwei dinge:
1. Wie bekomme ich die zuordnung zum Datum hin
2. Ich hatte vergessen zu erwähnen, das "Urlaub" aufgeteilt ist auf 2 Halbjahre
D.h. 1 Halbjahr ist das Datum von Spalte B7-GA30 und die Namen von A8-A62
2. Haljahr ist das Datum von B64-GC64 und die Namen von A65-A119
Der "Monatsplan" geht von Datum D9-AH9 und die Namen von A12-A65
Wenn ich nun folgende WVERWEISe in einem Code kombinieren könnte '1.Halbjahr' (WVERWEIS($D$9:$AH$9;Urlaub!B7:GA62;2;FALSCH) und '2Halbjahr' WVERWEIS($D$9:$AH$9;Urlaub!B64:GC119;2;FALSCH)
Dann sollte das doch auch gehen, oder ?
Hat da vielleicht noch jemand eine Idee :-)
Anzeige
AW: Urlaubstage übertragen
26.11.2011 21:15:42
Reinhard
Hallo Ghostman,
mit B7:GA30 meinst du sicher B7:GA7.
Wie heißen denn die Monatstabellen.blätter?
U.v.m.
Lade mal eine Mappe hoch.
Gruß
Reinhard
AW: Urlaubstage übertragen
27.11.2011 00:38:53
Ghostman
Hallo Reinhard,
Die Monatstab. heisst immer gleich, da ich sie mit einem Makro kopiere und den "alten" Monat umbenenne.
hier hab ich die mal meine beiden Blätter hochgeladen
https://www.herber.de/bbs/user/77680.xls
Ich hoffe das reicht aus um deine Fragen zu beantworten. Wie gesagt das Blatt "Aktueller Monat" wird kopiert und die Kopie umbenannt.
Die Namen aus in beiden Blättern sind in "Blatt 3" hinterlegt und die Zellen damit verknüpft. Habe nicht alle verknüpfungen erwischt, deshalb wird beim öffnen noch danach gefragt. Sorry.
Gruß
Ghostman
Anzeige
Nachtrag zu meiner Antwort an Franz
27.11.2011 08:14:30
Chostman
Hallo Franz,
Ich hoffe du liest den Beitrag hier noch.
Sorry für die leicht spitze Bemerkung mit der Tasse Kaffee. Wollte dich nicht beleidigen.
Wie gesagt bei mir lief es nur Wahnsinnig langsam durch.
Also nix für ungut und danke
Ghostman
AW: Nachtrag zu meiner Antwort an Franz
27.11.2011 11:45:31
fcs
Hallo Ghostman,
du hast in deiner Datei Ereignismakros und etliches an Formeln. Dadurch wird das Makro ausgebremst.
Ich hab das Makro jetzt mal angepasst, so dass es den Jahres-Kalender in 2 Halbjahren durchsucht und durch die Ereignismakros und Neuberechnungen nicht mehr ausgebremst wird.
Ausführungszeit sollte im Sekundenbereich sein.
Vor der Makroausführung sollte die Datei ggf. neu berechent werden.
Ein komplexes Makro als solches ist ja kein Problem. Die Hauptarbeit in dem Makro besteht hier darin, die Bereiche im Jahreskalender zu finden/setzen, die durchsucht werden müssen. Das ist dann das gleiche Problem, mit dem du kämpfst, wenn du mit WVERWEIS die korrekten Bereiche in den Formeln ansprechen willst.
Zusätzlich hab ich dir auch die Lösung per Formel erstellt. Auch hier müssen während der Makro-Ausführung die Ereignismakros und die Neuberechnung deaktiviert werden.
Gruß
Franz
Sub UrlaubMarkieren()
Dim wksUrlaub As Worksheet, wksAkt As Worksheet
Dim rngUrlaub As Range, rngNamen As Range, rngDatum As Range
Dim rngHJ1 As Range, rngHJ2 As Range, rngHJ As Range
Dim varName As Variant, varDatum As Variant, varWert As Variant
Dim Zeile As Long, Spalte As Long, StatusCalc As Long
Dim ZeileU As Variant, SpalteU As Variant
Set wksUrlaub = Worksheets("Urlaub")
Set wksAkt = Worksheets("Aktueller Monat")
'Makrobremsen lösen
With Application
StatusCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With
'Startzelle für Halbjahre
With wksUrlaub
Set rngHJ1 = .Cells(8, 1)   'Zelle mit 1. Namen im 1. Halbjahr
Set rngHJ2 = rngHJ1.End(xlDown)
Set rngHJ2 = rngHJ2.End(xlDown) 'Zelle mit 1. Namen im 2. Halbjahr
'Datenbereich im Blatt Urlaub
If Month(wksAkt.Cells(9, 4).Value)  "U" Then Zelle.ClearContents
Next
End With
End With
'Makrobremsen zurücksetzen
With Application
.Calculation = StatusCalc
.EnableEvents = True
.ScreenUpdating = True
End With
wks.Range("D12").Value = wks.Range("D12").Value 'löst das Ereignismakro inkl. Formatieren aus
End Sub

Anzeige
AW: Nachtrag zu meiner Antwort an Franz
27.11.2011 14:50:39
Chostman
Hi Franz,
Hatte ich mir fast gedacht das es daran lag. Hatte sie eigentlich zum testen auch ausgeblendet. Na egal.
Die neue Version von deinen Code funktioniert tadellos.
Klasse Arbeit.... was mich immer noch wundert, ist die länge des Codes. Hätte nicht gedacht das er so umfangreich wird.
Glaube ich sollte mir doch mal ein Buch über VBA kaufen, dann würde ihn auch besser verstehen ;-)
Also noch mal vielen Dank für die Hilfe.
Auch noch mal Danke an dich Reinhard.
Gruß und eine gute Zeit
Ghostman
P.s. Franz, wenn du sagst ich hätte viele Formel, hättest du dafür grad noch spontan ne lösung? Muss aber nicht sein. Es geht ja auch so und es ist selbst gemacht ;-)
Anzeige
AW: Nachtrag zu meiner Antwort an Franz
27.11.2011 15:25:10
fcs
Hallo Ghostman,
P.s. Franz, wenn du sagst ich hätte viele Formel, hättest du dafür grad noch spontan ne lösung? Muss aber nicht sein. Es geht ja auch so und es ist selbst gemacht ;-)
Das Hauptproblem in deiner Datei war das Ereignismakro, das nach jeder Wertänderung alle Zellen des Eingabebereichs neu formatiert. D.h, ohne die Deaktivierung der Ereignismakros musste die Formatierung des gesamten Eingabebereichs ca. 30*55 = 1650 mal neu berechnet werden. Da kann man sich schon mal ne Tasse Kaffe einschenken. Erschwerend kam dann noch dazu, dass die Bildschirm-Aktualisierung während der Makroausführung nicht abgeschaltet war.
Die Neuberechnungen der ZÄHLENWENN-Funktionen in den Formeln waren dann "nur" noch das i-Tüpfelchen.
Die Formeln als solches sind ja in Ordnung und Excel ist nun mal ein Kalkulationsprogramm.
Man muss halt nur wissen, in welchen Situationen es sinnvoll ist, die permanente Neuberechnung abzuschalten.
Gruß
Franz
Anzeige
AW: Nachtrag zu meiner Antwort an Franz
27.11.2011 19:37:14
Chostman
Hi Franz,
Alles Klar danke noch mal für die (er)klärenden Worte. Macht jetzt auch einen Sinn für mich.
Werde ich zukünftig mit beachten.
Gruß
Ghostman
Noch mals Danke....Jetzt kann ich nämlich das Projekt abschliessen und mal wieder früher ins Bett :-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige