Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[VBA] TextBox Eingabe dividieren durch VLookUp
#1
Rainbow 
Moin moin liebe Excelisten,  57

motiviert durch euer Feedback zu meiner letzten Frage habe ich mein Projekt von vorne begonnen.
Kurz zusammengefasst geht es um eine betriebsübergreifende Struktur von Dienstplänen, Mitarbeiterdatenbank und Auswertungen.

Die Basis stellt die Mitarbeiterdatenbank dar, welche durch die Personalabteilung via UserForm gefüttert, bzw. gepflegt wird.
Dort stehe ich momentan bei ca. 95%, allerdings habe ich noch wenige Kleinigkeiten bei denen ich eure Hilfe benötige.

Unter anderem soll bei neuen Mitarbeitern das Bruttogehalt -oder- der Bruttostundenlohn eingetragen werden. 
Dafür stehen die TextBox_bruttogehalt und die TextBox_bruttostundenlohn zur Verfügung.

Schön wäre es, wenn sobald eine TextBox gefüllt ist, die andere TextBox für Eingaben gesperrt wird. (ich denke da an .Locked und zusätzlich eine MsgBox falls eine Eingabe versucht wird.)

Nun soll allerdings die Spalte in der Datenbankstabelle nicht leer bleiben, sondern mithilfe hinterlegter Basisdaten ausgerechnet werden.

Beispiel:

Neuer Mitarbeiter wird auf Vollzeit (174h/Monat) mit mit einem Bruttogehalt von 3600€ angestellt, dann soll beim Hinzufügen des Mitarbeiters die Spalte Bruttostundenlohn automatisch ausgefüllt werden, nämlich mit 3600 (Eingabe in TextBox_bruttogehalt) geteilt durch 174 (VLookUp -> Worksheet "Basisdaten" -> matrix_vertragliche_arbeitszeit, Spalte 4).

Andersherum natürlich auch, nämlich wenn nur der Bruttostundenlohn eingetragen wird, dann dieser Wert multipliziert mit der monatlichen Stundenanzahl der jeweiligen Vertragsart der matrix_vertragliche_arbeitszeit.

Der Gefahr bewusst, dass ihr mich aufgrund eines Denkfehlers hin in der Luft zerreißt, freue ich mich dennoch auf eure Antworten.

Danke!  19

Nachfolgend der Code der UserForm_neuermitarbeiter:

Code:
Private Sub CommandButton_hinzufuegen1_Click()

'Erste freie Zeile finden
Dim last As Integer

last = Worksheets("Mitarbeiterdatenbank").Cells(Rows.Count, 1).End(xlUp).Row + 1

'Anrede
If OptionButton_weibl.Value = True Then Cells(last, 1).Value = "Frau"
If OptionButton_männl.Value = True Then Cells(last, 1).Value = "Herr"
If OptionButton_divers.Value = True Then Cells(last, 1).Value = "Divers"

'Vorname
Cells(last, 2).Value = TextBox_vorname

'Nachname
Cells(last, 3).Value = TextBox_nachname

'Mitarbeiternummer
Cells(last, 4).Value = TextBox_mitarbeiternummer

'Anmerkungen
Cells(last, 5).Value = TextBox_anmerkungen

'Betriebszugehörigkeit
Cells(last, 6).Value = ComboBox_betrieb

'Angestellt bei
If ComboBox_betrieb.Value <> "" Then
Cells(last, 7).Value = WorksheetFunction.VLookup(ComboBox_betrieb, Sheets("Basisdaten").[matrix_betriebe], 2, False)
Else
End If

'Abteilung
If OptionButton_service.Value = True Then Cells(last, 8).Value = "Service"
If OptionButton_küche.Value = True Then Cells(last, 8).Value = "Küche"
If OptionButton_sonstige.Value = True Then Cells(last, 8).Value = "Sonstiges"

'Position
Cells(last, 9).Value = ComboBox_position

'Vertragsart
Cells(last, 10).Value = ComboBox_anstellungsart

'Wochenstunden
If ComboBox_anstellungsart.Value <> "" Then
Cells(last, 11).Value = WorksheetFunction.VLookup(ComboBox_anstellungsart, Sheets("Basisdaten").[matrix_vertragliche_arbeitszeit], 3, False)
Else
End If

'Monatsstunden
If ComboBox_anstellungsart.Value <> "" Then
Cells(last, 12).Value = WorksheetFunction.VLookup(ComboBox_anstellungsart, Sheets("Basisdaten").[matrix_vertragliche_arbeitszeit], 4, False)
Else
End If

'Eintrittsdatum
Cells(last, 13).Value = TextBox_eintrittsdatum

'Befristung
Cells(last, 14).Value = TextBox_befristung

'Bruttogehalt
If TextBox.bruttostundenlohn.Value = "" Then
    Cells(last, 15).Value = TextBox_bruttogehalt
Else
    Cells(last, 15).Value = TextBox_bruttostundenlohn * WorksheetFunction.VLookup(ComboBox_anstellungsart, Sheets("Basisdaten").[matrix_vertragliche_arbeitszeit], 4, False)

'Bruttostundenlohn


'Urlaubstage
Cells(last, 17).Value = TextBox_urlaubstage

'Nachtzuschläge
If CheckBox_nachtzuschläge.Value = True Then
        Cells(last, 18).Value = "Ja"
Else
        Cells(last, 18).Value = "Nein"
End If

'Sonn/Feiertagszuschläge
If CheckBox_sonnfeiertagszuschläge.Value = True Then
        Cells(last, 19).Value = "Ja"
Else
        Cells(last, 19).Value = "Nein"
End If

'Telefon
Cells(last, 20).Value = TextBox_Telefon

'E-Mail
Cells(last, 21).Value = TextBox_email

'Straße
Cells(last, 22).Value = TextBox_straße

'Hausnummer
Cells(last, 23).Value = TextBox_hausnummer

'Postleitzahl
Cells(last, 24).Value = TextBox_postleitzahl

'Stadt
Cells(last, 25).Value = TextBox_stadt

'IBAN
Cells(last, 26).Value = TextBox_iban

'Bankinstitut
Cells(last, 27).Value = TextBox_bankinstitut

'BIC
Cells(last, 28).Value = TextBox_bic

'Steuernummer
Cells(last, 29).Value = TextBox_steuernummer

'Steuerklasse
Cells(last, 30).Value = TextBox_steuerklasse

'Religionsangehörigkeit
Cells(last, 31).Value = ComboBox_religion

'Gesundheitszeugnis
If CheckBox_gesundheitszeugnis.Value = True Then
        Cells(last, 32).Value = "Ja"
Else
        Cells(last, 32).Value = "Nein"
End If

'Krankenkasse
Cells(last, 33).Value = TextBox_krankenkasse

'Sozialversicherungsnummer
Cells(last, 34).Value = TextBox_sozialversicherungsnummer

'Eingabefenster schließen nach dem Hinzufügen
Unload UserForm_neuermitarbeiter

End Sub


Private Sub CommandButton_abbrechen1_Click()

'Eingabefenster schließen
Unload UserForm_neuermitarbeiter

End Sub

Private Sub CommandButton_abbrechen2_Click()

'Eingabefenster schließen
Unload UserForm_neuermitarbeiter

End Sub

Private Sub CommandButton_abbrechen3_Click()

'Eingabefenster schließen
Unload UserForm_neuermitarbeiter

End Sub

Private Sub CommandButton_hinzufuegen2_Click()

'Verbindung der drei "Hinzufügen" Buttons
CommandButton_hinzufuegen1_Click

End Sub

Private Sub CommandButton_hinzufuegen3_Click()

'Verbindung der drei "Hinzufügen" Buttons
CommandButton_hinzufuegen1_Click

End Sub


Private Sub Label29_Click()

End Sub

Private Sub MultiPage1_Change()

End Sub

Private Sub TextBox_eintrittsdatum_AfterUpdate()

'Datumseingabe prüfen
If TextBox_eintrittsdatum.Value = "" Then
        ElseIf IsDate(TextBox_eintrittsdatum) Then TextBox_eintrittsdatum = CDate(TextBox_eintrittsdatum)
        ElseIf Not IsDate(TextBox_eintrittsdatum) Then MsgBox TextBox_eintrittsdatum & " ist kein gültiges Datumsformat. (TT.MM.YYYY)"
        TextBox_eintrittsdatum = vbNullString
End If

End Sub


Private Sub TextBox_befristung_AfterUpdate()

'Datumseingabe prüfen
If TextBox_befristung.Value = "" Then
    ElseIf IsDate(TextBox_befristung) Then TextBox_befristung = CDate(TextBox_befristung)
    ElseIf Not IsDate(TextBox_befristung) Then MsgBox TextBox_befristung & " ist kein gültiges Datumsformat. (TT.MM.YYYY)"
    TextBox_befristung = vbNullString
End If

End Sub

Private Sub SpinButton_steuerklasse_Change()

'Wert von SpinButton im Textfeld anzeigen
TextBox_steuerklasse.Text = SpinButton_steuerklasse.Value

End Sub

Private Sub SpinButton_steuerklasse_Click()

'Markierung beim Klicken aufheben
CommandButton_hinzufuegen2.SetFocus

End Sub

Private Sub TextBox_steuerklasse_Change()

    'Textbox mit SpinButton synchronisieren
If IsNumeric(TextBox_steuerklasse.Value) And TextBox_steuerklasse.Value >= SpinButton_steuerklasse.Min And TextBox_steuerklasse.Value <= SpinButton_steuerklasse.Max Then
    'Wert zuweisen
    SpinButton_steuerklasse.Value = TextBox_steuerklasse.Value
Else
    'Wertbeibehaltung bei ungültiger Eingabe
    TextBox_steuerklasse.Value = SpinButton_steuerklasse.Value
End If
End Sub

Private Sub UserForm_Initialize()

'Immer mit Seite 1 starten
MultiPage1.Value = 0

'OptionButton_weibl



'OptionButton_männl



'OptionButton_divers



'TextBox_vorname



'TextBox_nachname



'TextBox_mitarbeiternummer



'TextBox_straße



'TextBox_hausnummer



'TextBox_postleitzahl



'TextBox_stadt



'TextBox_iban



'TextBox_bankinstitut



'TextBox_bic



'TextBox_steuernummer



'TextBox_steuerklasse
TextBox_steuerklasse.Text = SpinButton_steuerklasse.Value


'SpinButton_steuerklasse
SpinButton_steuerklasse.Max = 6
SpinButton_steuerklasse.Min = 1
SpinButton_steuerklasse.Value = 1

'ComboBox_religion
With ComboBox_religion
    .AddItem "evangelisch"
    .AddItem "evangelisch-reformiert"
    .AddItem "römisch-katholisch"
    .AddItem "alt-katholisch"
    .AddItem "jüdisch"
    .AddItem "israelitisch"
    .AddItem "protestantisch"
    .AddItem "ohne"
End With

'TextBox_krankenkasse



'TextBox_sozialversicherungsnummer



'ComboBox_betrieb
With ComboBox_betrieb
   
    .RowSource = "liste_betriebe"
    .Style = fmStyleDropDownList
    .ListRows = 7
   
End With

'OptionButton_küche



'OptionButton_service



'OptionButton_sonstige



'ComboBox_position
With Me.ComboBox_position
   
    .RowSource = "liste_positionen"
    .Style = fmStyleDropDownList
    .ListRows = 15
   
End With



'TextBox_eintrittsdatum



'TextBox_befristung



'ComboBox_anstellungsart
With Me.ComboBox_anstellungsart
   
    .RowSource = "liste_vertragsart"
    .Style = fmStyleDropDownList
    .ListRows = 14

End With

'TextBox_bruttogehalt



'TextBox_bruttostundenlohn



'CheckBox_nachtzuschläge



'CheckBox_sonnfeiertagszuschläge



'TextBox_urlaubstage



'TextBox_anmerkungen



'CommandButton_hinzufügen



'CommandButton_abbrechen

End Sub
Antworten Top
#2
Hallo,
zunächst sollte man kein Grossposting betreiben!

https://www.ms-office-forum.net/forum/sh...p?t=373845

Zum weiteren hast Du warscheinlich deshalb keine Antwort bis jetzt, weil keiner Lust hat den ganzen Code in eine Beipiel umzusetzen.
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)
[-] Folgende(r) 1 Nutzer sagt Danke an EbyAS für diesen Beitrag:
  • Mase
Antworten Top
#3
Hey EbbyAS, 
danke für die Antwort.

Tatsächlich sehe ich kein Problem in der Tatsache, dass ich meine Frage in zwei Foren gestellt habe. Sobald ich eine Lösung gefunden habe, werde ich die Antwort mit Verweis auf den Ersteller auch in dem anderen Forum veröffentlichen, um das erlangte Wissen weiter zu geben. Ich denke, dass es nicht um Konkurrenz geht, sondern um das gegenseitige Unterstützen.
Wenn ich in einem Forum andere Personen erreichen kann als in diesem, ist das doch keine negative Sache, sondern kann dann im Anschluss beiden Communities einen Mehrwert bringen.  100 

Zurück zum Thema:

Ich werde gleich versuchen, die Datei in abgespeckter Version hochzuladen.  28

Anbei die Datei in abgespeckter Version.  70


Angehängte Dateien
.xlsm   Mitarbeiterdatenbank_abgespeckt.xlsm (Größe: 289,98 KB / Downloads: 4)
Antworten Top
#4
Hallo Dennis,

das Posten in zwei Foren zum selben Thema wird deshalb nicht gemocht, weil in der Regel der TE, also in diesem Fall du, die Foren nicht untereinander verlinkt. Lies doch bitte mal den Beitrag hinter diesem Link durch: https://www.clever-excel-forum.de/misc.php?action=help&hid=10
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top


Gehe zu:


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