1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Schleifchen

Beiträge von Schleifchen

  • Runde 2: Daten in Excel aufteilen nach Monaten

    • Schleifchen
    • 16. Februar 2018 um 18:03
    Zitat von Alina

    Habe gerade festgestellt, das das VBA an Schaltjahren nicht richtig arbeitet.

    Ja, da habe ich nicht richtig nachgedacht. Wenn der Februar einen Tag länger ist müssen in den Folgemonaten der Anfang UND Ende um jeweils einen Tag verlängert werden.

    Ich werde es mal in ein Array pressen, nur leider nicht heut :)

    Code
    Falsch: Worksheets(strMonatName).Range("B7:G" & intEinfuegeEnde) = varKopierBereich

    Mit obigem Code wird dem Zellbereich die Variable zugewiesen. Beide Bereich müssen die gleich Größe haben. Ergo sollte das dann funktionieren:

    Code
    Richtig: Worksheets(strMonatName).Range("B7:G" & intEinfuegeEnde + 6) = varKopierBereich

    Es gibt noch ne andere Funktion welche den Zielbereich automatisch anpasst, komm aber grad nicht drauf...

    Gruß

    Stefan

  • Runde 2: Daten in Excel aufteilen nach Monaten

    • Schleifchen
    • 16. Februar 2018 um 15:26

    Na dann ist ja alles fast perfekt!

    Zitat von Alina

    Diese Felder sollen auf jedes erstellte Monatsblatt kopiert werden, das zu dem intjahr gehört.

    da stehe ich bisschen auf dem Schlauf :) Wenn ich Dir noch helfen soll, dann mach bitte eine fertige Beispieldatei zurecht. Ansonsten lassen sich die Formeln auch per Vba definieren:

    Code
    Range("A3").FormulaLocal = "=SUMME(A1:A2)"
    
    'einfaches Beispiel - alle Terms sind per Variable frei belegbar...
    Dim bytWert as Byte
    bytWert = 6
    
    Range("A3").FormulaLocal = "=SUMME(A1:A" & bytWert  ")"
  • Runde 2: Daten in Excel aufteilen nach Monaten

    • Schleifchen
    • 15. Februar 2018 um 20:24
    Code
    Option Explicit
    
    
    Sub Daten_kopieren()
    Dim wksKalender As Worksheet
    Dim wksMonat As Worksheet
    Dim boli As Boolean
    Dim intJahr As Integer
    Dim bolSchaltjahr As Boolean
    Dim varKopierBereich
    Dim bytMonat As Byte
    Dim strMonatName As String
    Dim intEinfuegeEnde As Integer
    
    Set wksKalender = ThisWorkbook.Sheets(1)
    intJahr = wksKalender.Cells(1, 2)
    
    'prüft Schaltjahr:
    bolSchaltjahr = Day(DateSerial(intJahr, 2, 29)) = 29
    
    
    'prüfen ob Monatsblatt vorhanden ist und neu anlegen, zu kopierenden Bereich definieren:
    
    For bytMonat = 1 To 12
        Select Case bytMonat
            Case 1
                strMonatName = "Januar"
                varKopierBereich = wksKalender.Range("B3:G" & 33)
            Case 2
                strMonatName = "Februar"
                varKopierBereich = wksKalender.Range("B34:G" & 61 + bolSchaltjahr)
            Case 3
                strMonatName = "März"
                varKopierBereich = wksKalender.Range("B62:G" & 92 + bolSchaltjahr)
            Case 4
                strMonatName = "April"
                varKopierBereich = wksKalender.Range("B93:G" & 122 + bolSchaltjahr)
            Case 5
                strMonatName = "Mai"
                varKopierBereich = wksKalender.Range("B123:G" & 153 + bolSchaltjahr)
            Case 6
                strMonatName = "Juni"
                varKopierBereich = wksKalender.Range("B154:G" & 183 + bolSchaltjahr)
            Case 7
                strMonatName = "Juli"
                varKopierBereich = wksKalender.Range("B184:G" & 214 + bolSchaltjahr)
            Case 8
                strMonatName = "August"
                varKopierBereich = wksKalender.Range("B215:G" & 245 + bolSchaltjahr)
            Case 9
                strMonatName = "September"
                varKopierBereich = wksKalender.Range("B246:G" & 275 + bolSchaltjahr)
            Case 10
                strMonatName = "Oktober"
                varKopierBereich = wksKalender.Range("B276:G" & 306 + bolSchaltjahr)
            Case 11
                strMonatName = "November"
                varKopierBereich = wksKalender.Range("B307:G" & 336 + bolSchaltjahr)
            Case 12
                strMonatName = "Dezember"
                varKopierBereich = wksKalender.Range("B337:G" & 367 + bolSchaltjahr)
        End Select
    
    '        Stop
            boli = False
            For Each wksMonat In ThisWorkbook.Worksheets
                If wksMonat.Name = strMonatName Then
                        boli = True
                End If
            Next
            
            If boli = False Then
                Sheets.Add after:=Sheets(bytMonat + 1)
                Worksheets(bytMonat + 2).Name = strMonatName
                MsgBox ("Das Tabellenblatt " & strMonatName & " wurde erstellt") 'kann gelöscht werden
            End If
            
                
                
    'kopieren der monatlichen Daten nach Monatsblatt
        intEinfuegeEnde = Day(DateSerial(intJahr, bytMonat + 1, 0))
        Worksheets(strMonatName).Range("B1:G" & intEinfuegeEnde) = varKopierBereich
        Worksheets(strMonatName).Activate
        MsgBox ("Die Daten wurden in das Tabellenblatt " & strMonatName & " kopiert") 'kann gelöscht werden
    Next bytMonat
    
    MsgBox ("Kopiervorgang ist komplett") 'kann gelöscht werden
    
    End Sub
    Alles anzeigen

    Hallochen, in der Arbeitsmappe mit Alt+F11 den Editor öffen

    • ein neues Modul einfügen
    • obigen Code einfügen
    • die Arbeitsmappe als *.xlsm speichern
    • den Cursor in Code setzen und mit F8 Schritt für Schritt ausführen.

    Dann kannst du schön nachvollziehen wie der Code abgearbeitet wird.

    Wie soll der nächste Schritt sein?

    Dateien

    DynKan.rar 40,51 kB – 528 Downloads
  • Runde 2: Daten in Excel aufteilen nach Monaten

    • Schleifchen
    • 15. Februar 2018 um 10:08
    Zitat von Alina

    Erstes Problem, wie verteile ich es automatisch in die jeweiligen Monatstabellenblätter und muss ich die Tabellenblätter händisch erstellen oder geht soetwas auch via VBA?

    Beim ersten Start soll das ganze Jahr abgearbeitet werden? Wenn das erfolgt ist werden täglich nur noch die Änderungen in die bereits vorhandenen Tabellenblätter ergänzt? Ist das Richtig so?

    Wie soll es mehrjährig gehändelt werden, stehen Januar 2019 und Januar 2020 auf einem Tabellenblatt?

    Stefan

  • Runde 2: Daten in Excel aufteilen nach Monaten

    • Schleifchen
    • 14. Februar 2018 um 16:17

    Hallo Alina, das ist kein Problem und in Vba leicht zu erstellen. Je nach Wissenstand, versuche es in einzelne Schritte aufzuteilen und diese mit dem Makorrecorder in Excel aufzuzeichen. Anschließend kannst Du den Code händisch zusammenbauen. Oder stelle hier ein Beispielmappe rein.

    Stefan

  • Dateien zählen und löschen

    • Schleifchen
    • 8. Februar 2018 um 20:32
    Zitat

    Man lege Ordner an - Ordnername = dayof the year (das ist eine aufsteigende Zahl von 001 bis 365).

    Darauf bezog meine Ansage. Dein Code funzt perfekt. Der Pfad ist nun richtig gesetzt...

  • Dateien zählen und löschen

    • Schleifchen
    • 8. Februar 2018 um 19:29

    Hallo, verstehe ich nich so ganz :-/ . Es handelt sich um Dateien die von einem Kassenprogramm täglich automatisch angelegt werden. Sie beinhalten alle Kassenbewegungen seit Installation und haben mittlerweile die Größe von 350MB je Datei. Der Dateiname (PosBill_BackUp-180205.mdb) lässt sich nicht beeinflussen, lediglich der Sicherungsordner, der aber immer der gleiche ist.

    Stefan

  • Dateien zählen und löschen

    • Schleifchen
    • 8. Februar 2018 um 14:40

    Aha, habe es grad auf YouTube bei AutoIt96 gefunden...sehr schön, läuft jetzt :)

  • Dateien zählen und löschen

    • Schleifchen
    • 8. Februar 2018 um 14:31
    Code
    Global $sFilePath = C:\Users\Stefan\Desktop\OneDrive-2018-02-08 ; hier den gewünschten Pfad ohne abschließenden \ angeben
    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\Stefan\Desktop\Posbill_Sicherung_loeschen.au3"    
    C:\Users\Stefan\Desktop\Posbill_Sicherung_loeschen.au3 (5) : ==> Unable to parse line.: 
    Global $sFilePath = C:\Users\Stefan\Desktop\OneDrive-2018-02-08 
    Global $sFilePath = C:^ ERROR

    Tut mir leid, habe jetzt den Pfad wie oben eingesetzt. Bis C: scheint alles glatt zu laufen, aber warum nicht weiter???? Der Ordner liegt auf dem Desktop....

  • Dateien zählen und löschen

    • Schleifchen
    • 8. Februar 2018 um 14:15

    Hallo Musashi,

    Code
    Global $sFilePath = @ScriptDir & C:\Users\Stefan\Downloads\OneDrive-2018-02-08 ; hier den gewünschten Pfad ohne abschließenden \ angeben
       #ce der Pfad funzt nicht:
       hier die Fehlermeldung:
                               C:\Users\Stefan\Desktop\Posbill_Sicherung_loeschen.au3 (5) : ==> Unable to parse line.: 
       aber auch mit nur C:\Users\Stefan\Downloads\OneDrive-2018-02-08 erscheint ne Fehlermeldung. Wo liegt die Ursache?
       #cs

    Der Pfad ist aus der Explorerleiste kopier, also keine Schreibfehler. Und warum wird @ScriptDir und Pfad verknüpft?

    Danke

    Stefan

  • Dateien zählen und löschen

    • Schleifchen
    • 7. Februar 2018 um 22:39

    Danke, schau ich mir in Ruhe an...

  • Hallochen allerseits

    • Schleifchen
    • 7. Februar 2018 um 22:08

    Ja, das mit der Sauce ist so ein Ding...aber kriegen wir hin :)

  • Dateien zählen und löschen

    • Schleifchen
    • 7. Februar 2018 um 22:05

    Hallochen allerseits, ein einem Ordner wird jeden Tag eine Sicherungsdatei erstellt. Ich möchte das nur jeweils die 5 jüngsten Sicherungen erhalten und der Rest soll gelöscht werden.

    Der Ablauf könnte vielleicht so aussehen:

    • Alles vorhandenen Zählen und so die Größe eines Arrays bestimmen
    • über FileGetTime das Array füllen
    • das Array sortieren von jung nach alt:thumbup:
    • alle Dateien die älter als 5 sind werden gelöscht.


    Fragen:

    1. wie kann die Anzahl der Dateien bestimmt werden?
    2. kann ein Array derartig sortiert werden?

    Danke für jede Hilfe

    Stefan

  • Hallochen allerseits

    • Schleifchen
    • 7. Februar 2018 um 21:47

    Hallochen allerseits, ich bin 63 Jahr alt...gelernter Koch und gehe nun in den Ruhestand :):):). Habe daher recht viel Zeit und beschäftige mich gern am PC. Irgendwie hab ich zu AutoIt gefunden...ja dann wolln wir mal....

    Mein Vorkenntnissstand: =0 <X

    Grüße in die Runde...

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™