Microsoft Excel

Herbers Excel/VBA-Archiv

makros sind lahm | Herbers Excel-Forum


Betrifft: makros sind lahm von: Udo F.
Geschrieben am: 30.07.2012 11:56:24

Hallo zusammen,

seitdem ich von office 2007 auf 64 bit office 2010 umgestellt habe, braucht es 15 !!! in Worten fünfzehn Sekunden bis ich wieder nach ausführen des Makros auf Excel zugreifen kann. Ich hab nen 12 ghz Prozessor und 6 GB ram. Das kann doch irgendwie nicht sein.

Auf office 2007 ging das viel schneller und schon gar nicht brauchte es nach ausführen des Makros 15 secunden bis excel wieder zur Verfügung stand.

Den Code hab ich mit Makro aufzeichnen angefertigt:


  • Sub Ro_01_R_02()
    '
    ' 1+2 Makro
    '
    
    '
    Workbooks.Open Filename:="G:\Datenblätter\db1.csv"
    
        Windows("db1.csv").Activate
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array( _
    13, 1 _
            ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1),  _
    Array _
            (20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, _
     1), _
            Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array(32, 1),  _
    Array( _
            33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1), Array(38, 1), Array(39,  _
    1), _
            Array(40, 1), Array(41, 1), Array(42, 1), Array(43, 1), Array(44, 1), Array(45, 1),  _
    Array( _
            46, 1), Array(47, 1), Array(48, 1), Array(49, 1), Array(50, 1), Array(51, 1), Array(52,  _
    1), _
            Array(53, 1), Array(54, 1), Array(55, 1), Array(56, 1), Array(57, 1), Array(58, 1),  _
    Array( _
            59, 1)), TrailingMinusNumbers:=True
            
            
            
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array( _
    13, 1 _
            ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1),  _
    Array _
            (20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, _
     1), _
            Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array(32, 1),  _
    Array( _
            33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1), Array(38, 1), Array(39,  _
    1), _
            Array(40, 1), Array(41, 1), Array(42, 1), Array(43, 1), Array(44, 1), Array(45, 1),  _
    Array( _
            46, 1), Array(47, 1), Array(48, 1), Array(49, 1), Array(50, 1), Array(51, 1), Array(52,  _
    1), _
            Array(53, 1), Array(54, 1), Array(55, 1), Array(56, 1), Array(57, 1), Array(58, 1),  _
    Array( _
            59, 1), Array(60, 1), Array(61, 1), Array(62, 1), Array(63, 1), Array(64, 1), Array(65,  _
    1), _
            Array(66, 1), Array(67, 1), Array(68, 1), Array(69, 1), Array(70, 1), Array(71, 1),  _
    Array( _
            72, 1), Array(73, 1), Array(74, 1), Array(75, 1), Array(76, 1), Array(77, 1), Array(78,  _
    1), _
            Array(79, 1), Array(80, 1), Array(81, 1), Array(82, 1), Array(83, 1), Array(84, 1),  _
    Array( _
            85, 1), Array(86, 1), Array(87, 1), Array(88, 1), Array(89, 1)), TrailingMinusNumbers _
            :=True
        Application.Run "PERSONAL.xlsb!format"
        
        Workbooks.Open Filename:="G:\Datenblätter\db2.csv"
    
        Windows("db2.csv").Activate
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array( _
    13, 1 _
            ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1),  _
    Array _
            (20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, _
     1), _
            Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array(32, 1),  _
    Array( _
            33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1), Array(38, 1), Array(39,  _
    1), _
            Array(40, 1), Array(41, 1), Array(42, 1), Array(43, 1), Array(44, 1), Array(45, 1),  _
    Array( _
            46, 1), Array(47, 1), Array(48, 1), Array(49, 1), Array(50, 1), Array(51, 1), Array(52,  _
    1), _
            Array(53, 1), Array(54, 1), Array(55, 1), Array(56, 1), Array(57, 1), Array(58, 1),  _
    Array( _
            59, 1)), TrailingMinusNumbers:=True
    
    Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array( _
    13, 1 _
            ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1),  _
    Array _
            (20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, _
     1), _
            Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array(32, 1),  _
    Array( _
            33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1), Array(38, 1), Array(39,  _
    1), _
            Array(40, 1), Array(41, 1), Array(42, 1), Array(43, 1), Array(44, 1), Array(45, 1),  _
    Array( _
            46, 1), Array(47, 1), Array(48, 1), Array(49, 1), Array(50, 1), Array(51, 1), Array(52,  _
    1), _
            Array(53, 1), Array(54, 1), Array(55, 1), Array(56, 1), Array(57, 1), Array(58, 1),  _
    Array( _
            59, 1), Array(60, 1), Array(61, 1), Array(62, 1), Array(63, 1), Array(64, 1), Array(65,  _
    1), _
            Array(66, 1), Array(67, 1), Array(68, 1), Array(69, 1), Array(70, 1), Array(71, 1),  _
    Array( _
            72, 1), Array(73, 1), Array(74, 1), Array(75, 1), Array(76, 1), Array(77, 1), Array(78,  _
    1), _
            Array(79, 1), Array(80, 1), Array(81, 1), Array(82, 1), Array(83, 1), Array(84, 1),  _
    Array( _
            85, 1), Array(86, 1), Array(87, 1), Array(88, 1), Array(89, 1)), TrailingMinusNumbers _
            :=True
        Application.Run "PERSONAL.xlsb!format"
        
        Windows("db2.csv").Activate
            Windows("db1.csv").Activate
        Application.Run "PERSONAL.xlsb!Modul21.DreisigSpaltenSollstDuWaehlen"
        Selection.copy
        Windows("db2.csv").Activate
        Range("BH1").Select
        ActiveSheet.Paste
        Application.Run "PERSONAL.xlsb!einfuegen"
         Application.Run "PERSONAL.xlsb!spaltenvergleich"
        Windows("db1.csv").Activate
        Application.Run "PERSONAL.xlsb!Modul3.löschen"
            Application.Run "PERSONAL.xlsb!format"
    End Sub


  •   

    Betrifft: 12 GHz? von: Sheldon
    Geschrieben am: 30.07.2012 16:12:11

    Hi Udo,

    auf den Prozessor bin ich aber neugierig? Der Schnellste den ich finden konnte im Atelco-Shop hat 4.2 GHz? Im Wesentlichen nehme ich an, die Geschwindigkeit hängt von der Größe der zu importierenden csv-Datei ab, ggf. noch von deren Verfügbarkeit, z. B. wenn geladen über Netzlaufwerk etc. Und auch die obligatorische Antwort hier aus dem Forum darf ja nicht fehlen: Office 64bit bringt eh keine Vorteile, warum also nicht einfach die 32bit Version benutzen?

    Gruß
    Sheldon


      

    Betrifft: AW: 12 GHz? von: Udo F.
    Geschrieben am: 30.07.2012 16:49:01

    stimmt, ich hab nen AMD Phenom II X4 940 Prozessor 3.00 GHz und hab den mit 4 multipliziert.

    Ich hätte auch die 32 Bit Version installiert, hab aber nur die 64er Version zur Hand gehabt. Und wie gesagt, an den Grössenverhältnissen der Makros bzw. der csv. Dateien hat sich ja nichts geändert. Die liefen unter office 2007 eben schneller.


      

    Betrifft: AW: 12 GHz? von: mumpel
    Geschrieben am: 30.07.2012 17:15:51

    Hallo!

    Die 64-bit-Version solltest Du wieder deinstallieren und die 32-bit-Version installieren. Unter Office 2010 Sicherungskopie bekommst Du auch eine 32-bit-Version. Der Lizenzschlüssel ist auch damit kompatibel (normalerweise).

    Die 64-bit-Version hat, was Makros angeht, ohnehin einige Schwächen. Vor allem was API angeht (Stichwort: PtrSafe)

    Gruß, René


      

    Betrifft: AW: makros sind lahm von: fcs
    Geschrieben am: 30.07.2012 16:58:18

    Hallo Udo,

    Rechenpower und vorhandener Arbeitsspeicher ist nicht alles was Excel braucht.

    Was jetzt deinen Rechner ausbremst ist schwer zu sagen.

    1. Auf alle Fälle vermeide seit der Umstellung von Excel 2003 auf 2007 das Kopieren ganzer Spalten, da jetzt statt ca. 65000 Zellen jetzt mehr als 1 Mio Zellen in den Kopiervorgang invollviert sind.
    D.h. in VBA-Prozeduren wird der mit Daten belegte Bereich ermittelt und nur dieser kopiert/eingefügt.

    2. Nach einem umfangreichen Kopiervorgang sollte der Zwischenablagespeicher von Excel leergeräumt werden.

    Beispiel:

    Sub Makro1()
    '
      Columns("A:A").Select
      Selection.Copy
      Range("J1").Select
      ActiveSheet.Paste
    
    End Sub
    
    
    ' Besser - einschliesslich Deaktivierung der Bildschirmaktualisierung, Ereignismakros und  _
    Neuberechnung während der Makroausführung.
    
    auf die Select -- Selection kann man meistens auch noch verzichten 
    
    Sub Makro2()
    '
      Dim StatusCalc As Long
      With Application
        .ScreenUpdating = False
        .EnableEvents = False
        StatusCalc = .Calculation
        .Calculation = xlCalculationManual
      End With
      
      Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Copy
      Range("J1").PasteSpecial Paste:=xlPasteAll
      Application.CutCopyMode = False
      
      With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = StatusCalc
      End With
    End Sub
    

    Gruß
    Franz


      

    Betrifft: AW: makros sind lahm von: Udo F.
    Geschrieben am: 30.07.2012 19:54:49

    Hallo Franz,

    Danke Dir, das waren wertvolle Hinweise.

    Gruss Udo


    Beiträge aus den Excel-Beispielen zum Thema "makros sind lahm"