ich tue mich manchmal etwas schwer mich richtig auszudrücken, gerade wenn ich total viel im Kopf habe und mir denselben gerade zerbreche :D
Mir geht es ja nur um folgendes:
Ich wähle den Mitarbeiter aus ( active sheet sozusagen ) und daneben habe ich ja meine ListBox mit den Kalenderwochen. Meine Überlegung war das wenn ich die entsprechende KW auswähle. das die Zeile dann "aktiv" ist.
ich hatte dann an einen Quellcode gedacht ungefähr so:
Wenn Tabelle so und so aktiv ist und Zeile so und so ( und das sie aktiv ist schaffe ich ja durch makieren in der UserForm ) dann trage Wert aus ComboBox1 da und aus Combobox 2 da usw
heißt wenn wir bei der KW 9 bleiben wollen: wäre ja das ja 37;4,5,6,12 38;4,5,6,12 39;4,5,6,12 40;4,5,6,12 41;4,5,6,12 42;4,5,6,12 43;4,5,6,12
würde ich jetzt KW 16 makieren wäre es ja so: 86;4,5,6,12 87;4,5,6,12 88;4,5,6,12 89;4,5,6,12 90;4,5,6,12 91;4,5,6,12 92;4,5,6,12
Ich möchte im Endeffekt nur das die Daten an richtiger Stelle eingetragen werden, dazu muss mein Formular ja aber wissen wo es beginnen soll, nämlich immer genau da wo ich die Kalenderwoche makiert habe..
Ich weiß nicht wie ich es besser erklären kann, ich hänge da seit einer Woche Tag und Nacht dran.. :D
01.11.2014, 13:24 (Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 13:25 von Rabe.)
(01.11.2014, 13:11)Malte1983 schrieb: Ich möchte im Endeffekt nur das die Daten an richtiger Stelle eingetragen werden, dazu muss mein Formular ja aber wissen wo es beginnen soll, nämlich immer genau da wo ich die Kalenderwoche makiert habe..
Ich weiß nicht wie ich es besser erklären kann, ich hänge da seit einer Woche Tag und Nacht dran.. :D
Das ist schon ausreichend erklärt.
Ich wollte Dir nur diesen Hinweis geben: um die Daten am richtigen Tag einzutragen, muß nicht in der Tabelle der Tag als die aktive Zelle angezeigt sein, das Formular weiß doch durch das Anklicken in der Userform, in welcher KW und an welchem Tag und damit in welcher Zeile die Arbeitszeiten usw. rein sollen.
Ein bekannter Helfer sagte immer: Der Cursor ist kein Hund, der an der Leine über das Tabellenblatt geführt werden muß.
Also: Es können durch ein Makro Daten in eine Zelle/Zeile eingetragen werden, ohne daß diese Zelle/Zeile explizit angesprungen und damit angezeigt wird
das wäre jetzt aber nur für die KW 9 ... ich checke es nicht... Wenn ich die KW in der UserForm ausgewählt habe, möchte ich das die Spalte bei behalten wird aber die Zeile sich ändert im Sinne von: markierter ausgangswert + 6 zeilen
also wenn ich dann KW 10 auswähle das er automatisch dann (44, 4 --- 45, 4 ) usw...
aber es ist ja auch nicht immer tabelle1.. oh man :D
Das klappt wunderbar. Könnte mir noch jemand verraten wie ich es schaffe, das wenn ich auf Speichern geklickt habe oder eben übernehmen ( CommandButton ), sich die Eingabemaske wieder öffnet um die nächsten Eingaben machen zu können. Ist es auch möglich, mit der "ActiveCell" Methode die Comboboxen die Einträge auslesen zu lassen?
Hintergrund: Wenn ich jetzt alles eingegeben habe und speichere, dann aber bemerke, dass ich am Freitag mich um eine Stunde vertan habe, ist alles wieder weg wenn ich den Freitag ändere, weil die anderen Boxen ja leer sind.
01.11.2014, 16:28 (Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 16:42 von Rabe.)
Hi Malte,
(01.11.2014, 13:39)Malte1983 schrieb:
Code:
Und genau da komme ich nicht weiter.
Ich kenne den Quellcode dazu nicht. Normal werden ja Daten so eingetragen:
[code] Tabelle1.Cells(37, 4) = ComboBox1.Text
Dann solltest Du die Werte verwenden, die aus Deiner UF ausgelesen werden!
So z.B.:
Code:
Option Explicit Public sMitarbeiter As String Public lngKw As Long
Private Sub ComboBox1_Change()
End Sub
Private Sub CommandButton1_Click() Sheets(sMitarbeiter).Cells(lngKw, 4) = TextBox2.Value ' oder ComboBox1.Text Sheets(sMitarbeiter).Cells(lngKw, 5) = TextBox9.Value ' oder ... Sheets(sMitarbeiter).Cells(lngKw, 6) = TextBox16.Value End Sub
Private Sub CommandButton2_Click() 'schließt die Eingabemaske Unload Me End Sub
Private Sub ListBox1_Click() sMitarbeiter = ListBox1.Value ' Sheets(ListBox1.Value).Select End Sub
Private Sub ListBox2_Click() lngKw = Application.Match(ListBox2, Sheets(sMitarbeiter).Columns("A"), 0) If Not IsError(lngKw) Then ' Application.Goto Cells(lngKw, 1), True Else MsgBox "Kalenderwoche " & ListBox2 & " nicht vorhanden" End If End Sub
Private Sub UserForm_Click()
End Sub
Private Sub Userform_Initialize() Dim objSheet As Object With ListBox1 .Clear For Each objSheet In ThisWorkbook.Sheets If objSheet.Visible = xlSheetVisible Then _ .AddItem objSheet.Name Next End With ListBox2.RowSource = "kalender"
01.11.2014, 16:41 (Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 16:44 von Rabe.)
Hi Malte,
(01.11.2014, 15:36)Malte1983 schrieb: Hintergrund: Wenn ich jetzt alles eingegeben habe und speichere, dann aber bemerke, dass ich am Freitag mich um eine Stunde vertan habe, ist alles wieder weg wenn ich den Freitag ändere, weil die anderen Boxen ja leer sind.
woher soll Excel wissen, ob Du vorhandene Daten überschreiben willst oder nicht?
ich glaube Du solltest Dir nochmal Gedanken über den Aufbau Deiner Tabelle machen oder zumindest über Deinen Ansatz die entsprechenden Informationen an der richtigen Stelle in der Tabelle einzutragen. Ich gehe davon aus Du wirst die aktuelle Tabelle nächstes Jahr fortführen wollen. Wenn Du also die Tabelle dann weiter nach unten kopierst, werden sich die Kalenderwochen wiederholen. Wie soll dann, mit dem jetzt verfolgten Ansatz, der Eintrag an der richtigen Stelle funktionieren?
Meine Vorschreiber haben es bereits angedeutet... Du musst in jedem Fall noch das Jahr mit abfragen für das die Eintragung erfolgen soll. Andernfalls wirst Du Dir Deinen Datenbestand überschreiben.
also ich möchte mich gaaanz dolle bei Euch Bedanken, ich bin schon ein großen Schritt weiter gekommen. Ich hänge die Datei nochmal an.
@Rabe, du hast natürlich Recht, dass kann Excel nicht wissen. Ich hatte mal wieder einen Denkfehler. Ich habe nun anstatt "Unload Me" Me.Hide" verwendet. Dann muss ich zumindest nicht alles nochmal neu ausfüllen.
@Max, danke nochmal für den Hinweis. Ich hatte allerdings nicht vor die Tabelle bis ins Nirvana länger werden zu lassen. Ich werde die Datei einfach jedes Jahr speichern unter "Stunden-MA-2014" usw da bleibt es auch ein wenig übersichtlicher.
Es stimmt allerdings das ich noch bis zum 20.01.2015 die Tabelle von 2014 verwenden muss. Da sich die Zahlen wiederholen, könnte man unter der Bezugstabelle die Einträge für die Kalenderwoche erweitern. Zur Not ginge dies auch mit einer "fiktiven" Kalenderwoche ( 53,54 ) oder falls ich alles wirklich in einer Excel-Datei machen sollte, gäbe es auch die Möglichkeit die Kalenderwochen umzubenennen z.B. 1-14, 2-14. und 2015 dann eben 1-15 , 2-15 oder so ähnlich. :)
So funktioniert bisher alles recht gut. Ich bedanke mich nochmal ganz Herzlich!
01.11.2014, 17:14 (Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 17:29 von Rabe.)
Hi Malte,
aha, Du verwendest also immer noch das Anspringen der entsprechenden Zeile.
(01.11.2014, 17:01)Malte1983 schrieb: @Rabe, du hast natürlich Recht, dass kann Excel nicht wissen. Ich hatte mal wieder einen Denkfehler. Ich habe nun anstatt "Unload Me" Me.Hide" verwendet. Dann muss ich zumindest nicht alles nochmal neu ausfüllen.
Du kannst auch ganz einfach durch Umkehrung des Schreibbefehls die Werte der Tabelle in die Userform wieder einlesen lassen, beim auswählen der KW:
Code:
Private Sub ListBox2_Click() lngKw = Application.Match(ListBox2, Sheets(sMitarbeiter).Columns("A"), 0) If Not IsError(lngKw) Then ' Application.Goto Cells(lngKw, 1), True TextBox2.Value = Sheets(sMitarbeiter).Cells(lngKw, 4) TextBox9.Value = Sheets(sMitarbeiter).Cells(lngKw, 5) TextBox16.Value = Sheets(sMitarbeiter).Cells(lngKw, 6) ' usw.; evtl noch mit Schleifen, das ist dann ganz kurz Else MsgBox "Kalenderwoche " & ListBox2 & " nicht vorhanden" End If End Sub
01.11.2014, 17:37 (Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 17:38 von Malte1983.)
Zitat: aha, Du verwendest also immer noch das Anspringen der entsprechenden Zeile.
Ja genau, ich wollte es mir so einfach machen wie möglich. Ich habe die Datei von dir auch ausprobiert, es funktioniert super nur fällt es mir als VBA-Anfänger schwer nachzuvollziehen was denn nu genau dort passiert und vor allem warum.
Ich glaube deine Lösung ist im Endeffekt die saubere. Nur da übernimmt er immer nur den Montag meiner ausgewählten Kalenderwoche, ich werde sie wahrscheinlich dann noch um Funktion erweitern müssen. bzw. mir den Code genau ansehen um zu verstehen.