Registriert seit: 10.04.2014
Version(en): 2016 + 365
01.11.2014, 18:04
(Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 20:33 von Rabe.)
(01.11.2014, 17:37)Malte1983 schrieb: 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. ich kann und sollte den Code wohl noch erläutern, erst mal so weit: Der Name des durch Listbox1 ausgewählten Mitarbeiters wird weiter oben der Variable sMitarbeiter und die in Listbox2 ausgewählte KW wird der Variable lngKW zugewiesen. Durch Aufruf Sheets... und Cells... mit den Variablen wird der Wert der Text- oder Comboboxen direkt in die entsprechenden Zellen geschrieben, ohne sie anspringen zu müssen. Klar übernimmt er nur den Montag, ich dachte, Du kannst das selbst erweitern, der Codeteil für Montag ist ja im CommandButton1_Click drin: Code: 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
' Dienstag dann so: Sheets(sMitarbeiter).Cells(lngKw+1, 4) = TextBox3.Value ' oder ComboBox1.Text Sheets(sMitarbeiter).Cells(lngKw+1, 5) = TextBox10.Value ' oder ... Sheets(sMitarbeiter).Cells(lngKw+1, 6) = TextBox17.Value
' Mittwoch bis Sonntag analog Sheets(sMitarbeiter).Cells(lngKw+2, 4) = TextBox4.Value ' oder ComboBox1.Text Sheets(sMitarbeiter).Cells(lngKw+2, 5) = TextBox12.Value ' oder ... Sheets(sMitarbeiter).Cells(lngKw+2, 6) = TextBox18.Value ' ... End Sub
Was anderes: Du hast in jeder Tabelle den Button für die Userform drin und schreibst dann in das aktuelle Blatt. Zu was benötigst Du dann die Listbox1? Drum hatte ich den Button nur ein Mal im Start-Blatt, da kannst Du dann schneller für mehrere Mitarbeiter alle Daten eingeben, ohne dauernd die Blätter zu wechseln. Du benutzt das Teil doch beruflich und Zeit ist Geld oder nicht? Dein Code kann und sollte verkürzt und dadurch schneller und übersichtlicher gemacht werden. Das muß auch kürzer gehen mit einer Schleife bei Initialisieren der Userform: Code: Private Sub ComboBox5_Change() ComboBox5 = Format(ComboBox5, "hh:mm") End Sub
Private Sub ComboBox6_Change() ComboBox6 = Format(ComboBox6, "hh:mm") End Sub
Private Sub ComboBox7_Change() ComboBox7 = Format(ComboBox7, "hh:mm") End Sub
Private Sub ComboBox8_Change() ComboBox8 = Format(ComboBox8, "hh:mm") End Sub
Registriert seit: 10.04.2014
Version(en): 2016 + 365
01.11.2014, 20:32
(Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 20:34 von Rabe.)
(01.11.2014, 18:04)Rabe schrieb: Klar übernimmt er nur den Montag, ich dachte, Du kannst das selbst erweitern, der Codeteil für Montag ist ja im CommandButton1_Click drin:
Code: 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
' Dienstag dann so: Sheets(sMitarbeiter).Cells(lngKw+1, 4) = TextBox3.Value ' oder ComboBox1.Text Sheets(sMitarbeiter).Cells(lngKw+1, 5) = TextBox10.Value ' oder ... Sheets(sMitarbeiter).Cells(lngKw+1, 6) = TextBox17.Value
' Mittwoch bis Sonntag analog Sheets(sMitarbeiter).Cells(lngKw+2, 4) = TextBox4.Value ' oder ComboBox1.Text Sheets(sMitarbeiter).Cells(lngKw+2, 5) = TextBox12.Value ' oder ... Sheets(sMitarbeiter).Cells(lngKw+2, 6) = TextBox18.Value ' ... End Sub
Ich habe jetzt mal umgestellt auf das Einlesen der Daten aus der Tabelle in die ComboBoxen und Eingeben mit Übernahme aller Tage aus der Userform. Verlassen des Formulars mit "Abbrechen"! Du hast außerdem noch ein Problem mit der Anzeige der Uhrzeit 00:00, dann sieht man nichts!
MeineMitarbeiter - umgebaut.xlsb (Größe: 109,13 KB / Downloads: 21)
@ Alle Bisher klappt es noch nicht, die Formatierung der Comboboxen als Uhrzeit über eine Schleife zu lösen. Wie kann das für 14 Boxen als For-Schleife im Userform_Initialize() gelöst werden? Code: Private Sub ComboBox1_Change() ComboBox1 = Format(ComboBox1, "hh:mm") End Sub
So geht es nicht: Code: ' Definition der Quelle und des Formats für die Arbeitszeiten-ComboBoxen ' Format funktioniert noch nicht For i = 1 To 14 Controls("ComboBox" & i) = Format(Controls("ComboBox" & i), "hh:mm") ' Format Controls("ComboBox" & i).RowSource = "uhrzeit" ' Quelle Next i
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Ralf, Mit RowSource wird es so eingelesen, wie es in der Tabelle steht., also lass Format einfach weg: Code: For i = 1 To 14 Controls("ComboBox" & i).RowSource = "uhrzeit" ' Quelle Next i
Gruß Atilla
Registriert seit: 29.10.2014
Version(en): Professional Plus 2013
01.11.2014, 21:36
(Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 21:42 von Malte1983.)
Hallo Ralf,
ja super, es scheint alles zu funktionieren. Also von Schleifen habe ich jetzt ja so überhaupt keine Ahnung :D aber wozu soll denn die Schleife dienen? Um überflüssigen Quellcode zu beseitigen?
00:00 Uhr wird wieder angezeigt. Ich hatte in den Optionen unter Erweitert die Option: " In Zellen mit Nullwert eine Null anzeigen" deaktiviert
EDIT: Ich werde den Button übrigens wieder auf das Start-Blatt setzen. Wenn ich die Auswahl der Mitarbeiter ja in meiner UserForm habe, ist es wirklich Quatsch diese für jeden MA separat anzulegen. Jetzt kommen halt noch die ganzen kleinen Feinheiten. Vor 2 Tagen hätte ich überhaupt nicht daran gedacht mal so weit zu kommen. Aber dank euch ist es tatsächlich gelungen :)
Registriert seit: 10.04.2014
Version(en): 2016 + 365
01.11.2014, 22:08
(Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 22:12 von Rabe.)
Hi Malte, (01.11.2014, 21:36)Malte1983 schrieb: ja super, es scheint alles zu funktionieren. Also von Schleifen habe ich jetzt ja so überhaupt keine Ahnung :D aber wozu soll denn die Schleife dienen? Um überflüssigen Quellcode zu beseitigen?
Jetzt kommen halt noch die ganzen kleinen Feinheiten. Vor 2 Tagen hätte ich überhaupt nicht daran gedacht mal so weit zu kommen. Aber dank euch ist es tatsächlich gelungen :) Ja, die Schleifen sind zur Codeverkürzung. Mal sehen, wo wir noch hinkommen, Du weißt ja: der Appetit kommt mit dem Essen. Tipp: Die Namensdefinitionen sind defekt, da steht ein BEZUG!-Fehler, Du mußt dort das Tabellenblatt wieder eintragen!
Registriert seit: 10.04.2014
Version(en): 2016 + 365
01.11.2014, 22:09
(Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 22:11 von Rabe.)
Hi Atilla, (01.11.2014, 21:31)atilla schrieb: Mit RowSource wird es so eingelesen, wie es in der Tabelle steht., also lass Format einfach weg: nein, dann stehen in den Comboboxen und der Tabelle Komma-Zahlen statt Uhrzeiten.
Registriert seit: 29.10.2014
Version(en): Professional Plus 2013
01.11.2014, 22:10
(Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2014, 22:24 von Malte1983.)
Kann man die RowSource nicht direkt im Eigenschaften-Fenster festlegen?
Wo ist der Bezug!-Fehler? ich habe nichts angezeigt bekommen.
Registriert seit: 01.11.2014
Version(en): 2007, 2010
(01.11.2014, 20:32)Rabe schrieb: @ Alle Bisher klappt es noch nicht, die Formatierung der Comboboxen als Uhrzeit über eine Schleife zu lösen.
Wie kann das für 14 Boxen als For-Schleife im Userform_Initialize() gelöst werden?
Code: Private Sub ComboBox1_Change() ComboBox1 = Format(ComboBox1, "hh:mm") End Sub
So geht es nicht:
Code: ' Definition der Quelle und des Formats für die Arbeitszeiten-ComboBoxen ' Format funktioniert noch nicht For i = 1 To 14 Controls("ComboBox" & i) = Format(Controls("ComboBox" & i), "hh:mm") ' Format Controls("ComboBox" & i).RowSource = "uhrzeit" ' Quelle Next i
Hallo Ralf, ein Ansatz allerdings ungetestet. Code: Private Sub UserForm_Initialize() Dim Steuerelement As Control
For Each Steuerelement In Me.Controls Select Case TypeName(Steuerelement) Case "ComboBox": Steuerelement.Format = "hh:mm" End Select Next Steuerelement End Sub
Gruß Max
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi Max, (02.11.2014, 01:38)Max schrieb: ein Ansatz allerdings ungetestet. danke für Deine Idee, aber ich glaube, so geht es auch nicht, denn es gibt dort drei Arten von ComboBoxen: Uhrzeiten, Dezimalzahlen (Pause: 0 und 0,5) sowie Texte Ist aber ebenfalls ungetestet.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Ralf, wie ich schrieb, werden die Uhrzeiten aus der Tabelle übernommen und werden auch als Uhrzeiten gelistet. (habe es noch einmal in einer neu angelegten Mappe getestet!) Erst wenn Du einen Eintrag aus der Combobox auswählst, wird dieser als Dezimalzahl angezeigt. Das hat aber Malte schon richtig abgefangen, indem er im Change Ereignis der Combobox die Anzeige wieder richtig stellt: Code: Private Sub ComboBox1_Change() ComboBox1 = Format(ComboBox1, "hh:mm") End Sub
Mich wundert mehr, dass so etwa funktioniert: Code: ComboBox1.RowSource = "uhrzeit"
Bisher kannte ich es so, dass man es so schreibt: Code: ComboBox1.RowSource = Range("uhrzeit").Address
Vielleicht hat einer der VBA Profis eine Erklärung dazu. Man muss noch wissen, dass "uhrzeit" ein benannter Berich in einer Tabelle ist.
Gruß Atilla
|