Tabelle leeren nach ändern der Personalnummer
#11
Hallo Ralf,

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
Top
#12
(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
Top
#13
Und genau da komme ich nicht weiter.

Ich kenne den Quellcode dazu nicht. Normal werden ja Daten so eingetragen:

Code:
Private Sub CommandButton1_Click()
Tabelle1.Cells(37, 4) = ComboBox1.Text
Tabelle1.Cells(38, 4) = ComboBox2.Text
Tabelle1.Cells(39, 4) = ComboBox3.Text
Tabelle1.Cells(40, 4) = ComboBox4.Text
Tabelle1.Cells(41, 4) = ComboBox5.Text
Tabelle1.Cells(42, 4) = ComboBox6.Text
Tabelle1.Cells(43, 4) = ComboBox7.Text
End Sub

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
Top
#14
Ich habe es jetzt vorerst so gelöst und bin ganz zufrieden:

Code:
Private Sub CommandButton1_Click()
    'Daten in die Tabelle eintragen
        ActiveCell.Offset(0, 3) = ComboBox1.Text
        ActiveCell.Offset(1, 3) = ComboBox2.Text
        ActiveCell.Offset(2, 3) = ComboBox3.Text
        ActiveCell.Offset(3, 3) = ComboBox4.Text
        ActiveCell.Offset(4, 3) = ComboBox5.Text
        ActiveCell.Offset(5, 3) = ComboBox6.Text
        ActiveCell.Offset(6, 3) = ComboBox7.Text
        ActiveCell.Offset(0, 4) = ComboBox8.Text
        ActiveCell.Offset(1, 4) = ComboBox9.Text
        ActiveCell.Offset(2, 4) = ComboBox10.Text
        ActiveCell.Offset(3, 4) = ComboBox11.Text
        ActiveCell.Offset(4, 4) = ComboBox12.Text
        ActiveCell.Offset(5, 4) = ComboBox13.Text
        ActiveCell.Offset(6, 4) = ComboBox14.Text
        ActiveCell.Offset(0, 5) = ComboBox15.Text
        ActiveCell.Offset(1, 5) = ComboBox16.Text
        ActiveCell.Offset(2, 5) = ComboBox17.Text
        ActiveCell.Offset(3, 5) = ComboBox18.Text
        ActiveCell.Offset(4, 5) = ComboBox19.Text
        ActiveCell.Offset(5, 5) = ComboBox20.Text
        ActiveCell.Offset(6, 5) = ComboBox21.Text
        ActiveCell.Offset(0, 11) = ComboBox22.Text
        ActiveCell.Offset(1, 11) = ComboBox23.Text
        ActiveCell.Offset(2, 11) = ComboBox24.Text
        ActiveCell.Offset(3, 11) = ComboBox25.Text
        ActiveCell.Offset(4, 11) = ComboBox26.Text
        ActiveCell.Offset(5, 11) = ComboBox27.Text
        ActiveCell.Offset(6, 11) = ComboBox28.Text
    'Formular schließen
    Unload Me
End Sub

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.
Top
#15
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"
    
            
End Sub

Hier Deine Datei erweitert:
.xlsb   Zeiterfassung Chef für Mitarbeiter.xlsb (Größe: 94,56 KB / Downloads: 10)
[-] Folgende(r) 1 Nutzer sagt Danke an Rabe für diesen Beitrag:
  • Malte1983
Top
#16
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?
Top
#17
Hallo Malte,

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.

Gruß
Max
Top
#18
Hallo Ihr,

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!


Angehängte Dateien
.xlsm   MeineMitarbeiter.xlsm (Größe: 216,13 KB / Downloads: 12)
Top
#19
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
Top
#20
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.
Top


Gehe zu:


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