Forum
Tipps
News
Menu-Icon

Excel VBA

Hallo,
ich habe folgendes Problem:
Ich habe eine grosse Tabelle, die ich abhängig vom Inhalt der Zellen in Spalte Z in mehrere kleinere teilen und jeweils unter separaten Namen abspeichern muss.
Dazu habe ich ein VBA Modul geschieben, dass zunächst die Ursprungstabelle mehrfach kopiert und
unter neuen Namen speichert. Jede der so erzeugten Tabellen wird anschliessend geladen und abhängig vom Inhalt in Spalte Z werden alle überflüssigen Zeilen gelöscht.
Das ganze funkioniert auch, dauert aber extrem lange. Bis etwa Zeile 80 geht es schnell, dann
wird es immer langsamer und ab etwa Zeile 160-180 hat man den Eindruck, der PC hängt. Das

Programm kommt aber ordnungsgemäss zum Ende.
Wer hat eine Idee, was dieses Verhalten verursacht, bzw wie man das ganz beschleuningen kann.
Aktualisierung der Bildschirmanzeige und Autom.Kalkulieren habe ich bereits ausgeschlatet!


Antworten zu Excel VBA:

Poste doch mal den Code..

Gruß

Public Sub CopySheets()
    NewLine = Chr(13)
    Tabs = Chr(9)
    Application.ScreenUpdating = False
    ChDir (InpPath)
   
    With Application
        .Calculation = xlManual
        .MaxChange = 0.001
    End With
    ActiveWorkbook.PrecisionAsDisplayed = False
   
    For ix1 = 1 To ixFoundDEFile                
        Application.StatusBar = "Create monthly Upd.File" & DEFile(ix1)
        UpdFile = Left(CreateFile(1), Len(CreateFile(1)) - 4) & "_" & DEFile(ix1) & ".xls"
        Workbooks.Open Filename:=CreateFile(1)
        ActiveWorkbook.SaveAs Filename:=InpPath & "\" & UpdFile, _
            FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
        CreateFile(1 + ix1) = UpdFile
        ActiveWindow.Close
    Next ix1
   
    For ix1 = 1 To ixFoundDEFile                
        OutStatusBar = "Update File: " & CreateFile(1 + ix1)
        Application.StatusBar = OutStatusBar
        ixRow = 3
        Workbooks.Open Filename:=CreateFile(1 + ix1)
        ActiveWorkbook.Worksheets("DE").Activate
       
        For ix2 = 3 To RowMaxDE
            If ActiveSheet.Cells(ixRow, DEColAdmin).Value <> DEFile(ix1) Then
                ActiveSheet.Rows(ixRow).Delete
            Else
                ixRow = ixRow + 1
            End If
            Application.StatusBar = OutStatusBar & " - Line " & ix2
        Next ix2
       
        ActiveSheet.Range("A1").Select
        ActiveWorkbook.Save
        ActiveWindow.Close
'        SavedFile(ix1) = "- " & UpdFile & Tabs2 & DEFileText(ix1 - 1) & NewLine
        SavedFile(30 + ix1) = "- " & CreateFile(30 + ix1)

    Next ix1

    With Application
        .Calculation = xlAutomatic
        .MaxChange = 0.001
    End With
    ActiveWorkbook.PrecisionAsDisplayed = False

End Sub

Warum wirfst die ungültigen aus der Ursprungstabelle(oder einer Kopie) nicht direkt raus und speicherst nacher die einzelnen Teile is doch viel weniger Aufwand und sicher auch schneller.

Gruß

weil ich wie gesagt mehrere verschiedene Teile erzeugen muss, will sagen TeilA enthält zB Zeilen 5-20, Teil B Zeilen 1-4 und 21-33 usw.
Das erzeugen der verschiedenen Dateien geht wirlklich schnell, das Laden und Speichern ebenfalls. Das Löschen der Zeilen in ein und derseleben Tabelle ist das Probelem

Jo soweit verstanden..aber dann wärs doch einfacher du machst es von oben nach unten fertig in einem Zug.

Du hast ja Kriterien nachdem du die Abschnitte in neue Tabellen aufteilst.
Und du hast auch kriterien nachdem du nacher aus den Teiltabellen die Zeilen löschst oder?

Und was am längsten dauert is das Löschen der ungültigen Zeilen.

Also liegts doch nahe das einfach zu umgehen..

Warum prüfst du nicht jede Zeile auf Abschnitts Kriterium und gleich auf gültige Zeile.

Wenn gültige Zeile schreibst sie in die jeweilige neue Teiltabelle nächste Tabelle anlegen für nächsten Teilabschnitt, wieder zeilen prüfen und nur die schreiben die gültig sind.. usw

Dadurch entfällt das kopieren und öffnen der Tabellen und auch das rauslöschen aus denselben, also du schreibst praktisch sofort das ergebnis in die jeweilige Tabelle für den jeweiligen Abschnitt.

Gruß

Danke, ok das ist eine Überlegung wert. Ich prüfe das mal  :)


« Delphi - ButtonVBA - dynamische Formeln erstellen&einfügen »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Internet-Zugriffsprogramm
Ein Internet-Zugriffsprogramm, auch Browser genannt, stellt Internetseiten für den Benutzer dar. Am bekanntesten ist der Microsoft Internet Explorer, gefolgt vom kos...

Programm
Siehe Software...

Blende
Die Blende, oder auch fotografische Blende, ist eine mechanische Vorrichtung und Teil des Objektives bei Foto- und Videokameras. Dieser Teil des Objektivs kontrolliert di...