Tabelle füllen und fortschreiben.

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Tabelle füllen und fortschreiben.
von: Ralf
Geschrieben am: 19.05.2015 16:25:50

Hallo zusammen,
die ewige Baustelle "Zeiterfassung".
Ich möchte aus der Arbeitsmappe "Zeiterfassung" die Werte in die Arbeitsmappe "Auswertung" übertragen und fortschreiben.
Es müssen zwei Arbeitsmappen sein, weil ich die Arbeitsmappe "Zeiterfassung" immer nach der Eingabe ohne zu speichern schließen lassen werde (per Schaltfläche 1). Dieser Button bewirkt noch ein paar andere Dinge, aber eines habe ich noch nicht raus:
Wie lasse ich mit Betätigung des Buttons die Werte der Felder F7, F10, F13 und H7 automatisch in die Felder A*, B*, C*, D* der Arbeitsmappe "Auswertung" schreiben und zwar so, dass mit jedem Eintrag eine neue Zeile begonnen wird, sich die Liste also automatisch nach unten hin füllt? Und dann sollte die Arbeitsmappe "Auswertung" idealerweise automatisch gespeichert und geschlossen werden (das bekomme ich aber wahrscheinlich ohne Hilfe hin).
Danke vorab
Ralf
https://www.herber.de/bbs/user/97720.xlsx
https://www.herber.de/bbs/user/97721.xlsx

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Nepumuk
Geschrieben am: 19.05.2015 20:43:05
Hallo,
teste mal:

Option Explicit

Public Sub Daten_übernehmen()
    Dim objWorkbook As Workbook
    Dim lngNextEmptyRow As Long
    If Not IsEmpty(Range("F7").Value) And Not IsEmpty(Range("F10").Value) And _
        Not IsEmpty(Range("F13").Value) And Not IsEmpty(Range("H7").Value) Then
        Set objWorkbook = Workbooks.Open(Filename:="C:\Auswertung.xlsx") 'anpassen !!!!!
        If Not objWorkbook.ReadOnly Then
            With objWorkbook.Worksheets("Auswertung") 'anpassen !!!!!
                lngNextEmptyRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                .Cells(lngNextEmptyRow, 1).Value = Range("F7").Value
                .Cells(lngNextEmptyRow, 2).Value = Range("F10").Value
                .Cells(lngNextEmptyRow, 3).Value = Range("F13").Value
                .Cells(lngNextEmptyRow, 4).Value = Range("H7").Value
            End With
            Call objWorkbook.Close(SaveChanges:=True)
            Call ThisWorkbook.Close(SaveChanges:=False)
        Else
            Call MsgBox("Daten können nicht gespeichert werden." & vbLf & vbLf & _
                "Bitte nochmal versuchen.", vbExclamation, "Hinweis")
        End If
    Else
        Call MsgBox("Bitte erst alle Felder audsfüllen.", vbExclamation, "Hinweis")
    End If
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Ralf
Geschrieben am: 20.05.2015 10:47:05
Hallo Nepumuk,
leider nein, leider gar nicht. :-)
Ich habe den Pfad und den Namen der Tabelle angepasst, erhalte auch keine Fehlermeldung. Aber es findet keine Füllung der Tabelle "Auswertung" in der Arbeitsmappe "Auswertung.xlsx" statt.
Gruß
Ralf

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Nepumuk
Geschrieben am: 20.05.2015 10:55:13
Hallo,
ooooooooops. Ändere mal die vier Zeilen zum Übertragen der Daten so:

.Cells(lngNextEmptyRow, 1).Value = ThisWorkbook.Worksheets("EIngabe").Range("F7").Value
.Cells(lngNextEmptyRow, 2).Value = ThisWorkbook.Worksheets("EIngabe").Range("F10").Value
.Cells(lngNextEmptyRow, 3).Value = ThisWorkbook.Worksheets("EIngabe").Range("F13").Value
.Cells(lngNextEmptyRow, 4).Value = ThisWorkbook.Worksheets("EIngabe").Range("H7").Value

Tabellenname anpassen !!!
Gruß
Nepumuk

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Ralf
Geschrieben am: 20.05.2015 11:07:15
Leider auch nicht.
Ich habe aber dazu zwei Fragen (ich bin ja Anfänger...);
Zum Einen liegt es wahrscheinlich nur an der Aktion, die ich irgendwie definieren muss (Click oder ähnliches), zum Anderen soll ich in die 4 Zeilen die ZIEL Tabelle, oder die QUELL Tabelle eintragen? Quelle wäre ja "Zeiterfassung" und Ziel "Auswertung".
Anbei mal der Code, wie ich ihn jetzt habe. NICHT LACHEN! :-)
Userbild

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Nepumuk
Geschrieben am: 20.05.2015 11:51:21
Hallo,
die Tabelle heißt "Zeiterfassung" und nicht Auswertung. Du musst der Schaltfläche doch nur per Rechtsklick das Makro zuweisen.
Gruß
Nepumuk

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Ralf
Geschrieben am: 20.05.2015 12:13:06
Hallo Nepumuk,
danke, das mit der "Zeiterfassung" habe ich eingetragen.
Aber das zuweisen des Makros mit dem Rechtsklick überfordert mich. Ich sagte ja, ich bin absoluter Anfänger.
Wo muss ich rechts klicken? Im Visual Basic, oder auf den Button im Frontend? Wenn ich da rechts klicke, passiert gar nichts.
Wenn ich im Visual Basic rechts klicken soll, dann wo genau? Und was dann auswählen, um zuzuweisen?
Bin ich anstrengend? :-) Tut mir leid.

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Nepumuk
Geschrieben am: 20.05.2015 12:31:44
Hallo,
na auf den Button in der Tabelle:
Userbild
Gruß
Nepumuk

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Ralf
Geschrieben am: 20.05.2015 12:43:02
Ähm...
Userbild

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Nepumuk
Geschrieben am: 20.05.2015 12:53:35
Hallo,
in deiner Mustermappe war eine Formularschaltfläche und das ist ein CommandButton. Da musst du den Code entweder per Call aus dem Click-Event starten oder direkt in das Click-Event einfügen.
Ich hab das nicht so gerne wenn die Muster nicht dem Original entsprechen. Da verliere ich die Lust dir zu helfen. Ich komme mir dabei nämlich verarscht vor. Vor allen Dingen von Leuten die dann keine Ahnung von VBA haben und meinen sie könnten das selber anpassen.
Gruß
Nepumuk

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Ralf
Geschrieben am: 20.05.2015 13:09:26
Hallo Nepumuk,
ich hatte eine Mustertabelle veröffentlicht, bei denen lediglich die Zellen mit dem Original übereinstimmen.
Das Problem ist, dass die Originale Tabelle im Betrieb ist und dort drin Namen aller möglichen Mitarbeiter stehen, die ich nicht veröffentlichen wollte.
Ich war (vielleicht meiner Anfängerschaft geschuldet) der Meinung, dass ein Muster absolut ausreichend ist, um den Code anschließend in das Original zu übertragen.
Theoretisch funktioniert das ja auch, nur der Button scheint halt anders zu sein. Also bitte nicht "verarscht" fühlen. Ich bin ja dankbar für deine Hilfe und versuche daraus zu lernen. Wenn ich VBA könnte, müsste ich nicht nerven.
Gruß
Ralf

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Ralf
Geschrieben am: 20.05.2015 15:13:02
Jetzt läuft es. Ich habe den Button in der Originaldatei gegen ein Makrotaugliches Exemplar ausgetauscht und deine Codes übertragen und angepasst. Super. Danke dafür!
Eins habe ich aber trotzdem noch: Nach beenden muss jetzt noch die Application "Excel" manuell mit dem "X" oben rechts beendet werden. Kann ich das noch irgendwie abstellen? Mit "application.quit", nehme ich an. Aber wie?
Der Code sieht jetzt so aus:
Option Explicit

Sub Schaltfläche3_Klicken()
    Dim objWorkbook As Workbook
    Dim lngNextEmptyRow As Long
    If Not IsEmpty(Range("F7").Value) And Not IsEmpty(Range("H7").Value) Then
        Set objWorkbook = Workbooks.Open(Filename:="G:\Teiledienst\AZ\Auswertung.xlsx")
        If Not objWorkbook.ReadOnly Then
            With objWorkbook.Worksheets("Auswertung")
                lngNextEmptyRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                .Cells(lngNextEmptyRow, 1).Value = ThisWorkbook.Worksheets("Zeiterfassung"). _
Range("F7").Value
                .Cells(lngNextEmptyRow, 2).Value = ThisWorkbook.Worksheets("Zeiterfassung"). _
Range("F10").Value
                .Cells(lngNextEmptyRow, 3).Value = ThisWorkbook.Worksheets("Zeiterfassung"). _
Range("F13").Value
                .Cells(lngNextEmptyRow, 4).Value = ThisWorkbook.Worksheets("Zeiterfassung"). _
Range("H7").Value
            End With
            Call objWorkbook.Close(SaveChanges:=True)
            Call ThisWorkbook.Close(SaveChanges:=False)
        Else
            Call MsgBox("Daten können nicht gespeichert werden." & vbLf & vbLf & _
                "Bitte nochmal versuchen.", vbExclamation, "Hinweis")
        End If
    Else
        Call MsgBox("Bitte erst alle Felder audsfüllen.", vbExclamation, "Hinweis")
    End If
        
End Sub


Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Nepumuk
Geschrieben am: 20.05.2015 15:16:33
Hallo,
ersetzen diese Zeile:
Call ThisWorkbook.Close(SaveChanges:=False)
durch diese beiden:
ThisWorkbook.Saved = True
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
Gruß
Nepumuk

Bild

Betrifft: AW: Tabelle füllen und fortschreiben.
von: Ralf
Geschrieben am: 20.05.2015 15:24:08
Top! Danke!

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Tabelle füllen und fortschreiben."