Thema Datum  Von Nutzer Rating
Antwort
21.11.2011 15:38:20 Dieter
NotSolved
21.11.2011 16:30:41 Ynachten
NotSolved
22.11.2011 08:00:34 Dieter
NotSolved
22.11.2011 20:59:58 Till
NotSolved
22.11.2011 09:07:30 Gast33767
NotSolved
22.11.2011 09:45:32 Dieter
NotSolved
22.11.2011 09:58:17 Till
NotSolved
22.11.2011 13:03:03 Dieter
NotSolved
Rot lange Wartezeit beim Makro
22.11.2011 21:01:08 Till
NotSolved
23.11.2011 10:41:23 Dieter
NotSolved
23.11.2011 22:25:45 Till
NotSolved
24.11.2011 08:13:15 Dieter
NotSolved
24.11.2011 14:55:45 Till
NotSolved
24.11.2011 15:24:00 Dieter
NotSolved
24.11.2011 16:16:39 Holger
NotSolved
24.11.2011 16:25:03 Dieter
NotSolved
24.11.2011 17:12:47 Till
NotSolved

Ansicht des Beitrags:
Von:
Till
Datum:
22.11.2011 21:01:08
Views:
1208
Rating: Antwort:
  Ja
Thema:
lange Wartezeit beim Makro

Das erklärt Alles, du bauftragst die Excel Suchfunktion 10000 mal in 1.000.000 * 15.000 Zellen nach einem Wert zu suchen. Die Excel Suchfunktion rechnet zwar recht schnell und dürfte den Bereich auf die UsedRange eindämmen, aber damit kommst du immernoch auf 10000*wsZweiZeilenAnzahl*Spaltenanzahl Zellen die durchsucht werden müssen. Hinzu kommen noch langsame Verweise auf Zellen anstatt Zugriffen auf ein Array...

Ich hab das mal ein wenig überarbeitet. Das Wesentliche Problem ist aber der Suchbereich in wsZwei. Den musst du versuchen einzudämmen.

Versuchs mal mit folgendem Makro und schreib die Meldungen hier auf:

Sub optimiert()
Dim wb As Workbook, ws As Worksheet, wbZwei As Workbook, wsZwei As Worksheet
Dim lSpalte&, strFile$, I&, sWert, Zugriffe&
Dim rngBereich As Range
Dim Arbeitsbereich As Range, Werte
 
    'set
        lSpalte = 1
        strFile = Application.GetOpenFilename
         
        Set wb = ThisWorkbook
        Set ws = wb.Sheets(1) 'Preis
        Set wbZwei = Workbooks.Open(Filename:=strFile)
        Set wsZwei = wbZwei.Sheets(3) '3
         
        With ws
            Set Arbeitsbereich = .Range(.Cells(10, 1), .Cells(.Rows.Count, 1).End(xlUp))
        End With
        Werte = Arbeitsbereich.Value
         
        For I = 1 To UBound(Werte)
         
            sWert = Trim(Werte(I, lSpalte))
            If sWert <> "" Then
                 
                Set rngBereich = wsZwei.Cells.Find(What:=sWert, LookIn:=xlValues, LookAt:=xlPart)
                 
                If Not rngBereich Is Nothing Then
                    Zugriffe = Zugriffe + 1
                    With ws
                        .Cells(I, lSpalte + 4).Font.ColorIndex = 3
                        .Cells(I, lSpalte + 5).Value = "JA"
                        .Cells(I, lSpalte + 5).Font.ColorIndex = 1
                    End With
                End If
                 
            Else
                Zugriffe = Zugriffe + 1
                ws.Cells(I, lSpalte + 5).Value = "NEIN"
            End If
        Next I
        MsgBox "Schreiben in Zellen: " & Zugriffe & " Zugriffe.", vbInformation
        MsgBox "Suchbereich: " & wsZwei.UsedRange.Address
         
End Sub

Cancel=True musst du wieder einabauen wenn du das in deine Ereignisprozedur einbauen willst....


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
21.11.2011 15:38:20 Dieter
NotSolved
21.11.2011 16:30:41 Ynachten
NotSolved
22.11.2011 08:00:34 Dieter
NotSolved
22.11.2011 20:59:58 Till
NotSolved
22.11.2011 09:07:30 Gast33767
NotSolved
22.11.2011 09:45:32 Dieter
NotSolved
22.11.2011 09:58:17 Till
NotSolved
22.11.2011 13:03:03 Dieter
NotSolved
Rot lange Wartezeit beim Makro
22.11.2011 21:01:08 Till
NotSolved
23.11.2011 10:41:23 Dieter
NotSolved
23.11.2011 22:25:45 Till
NotSolved
24.11.2011 08:13:15 Dieter
NotSolved
24.11.2011 14:55:45 Till
NotSolved
24.11.2011 15:24:00 Dieter
NotSolved
24.11.2011 16:16:39 Holger
NotSolved
24.11.2011 16:25:03 Dieter
NotSolved
24.11.2011 17:12:47 Till
NotSolved