Tabelle leeren nach ändern der Personalnummer
#21
(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. Angel
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
Top
#22
(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!


.xlsb   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
Top
#23
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
Top
#24
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 :)
Top
#25
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!
Top
#26
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.
Top
#27
Kann man die RowSource nicht direkt im Eigenschaften-Fenster festlegen?

Wo ist der Bezug!-Fehler? ich habe nichts angezeigt bekommen.
Top
#28
(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
Top
#29
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.
Top
#30
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
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste