Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1768to1772
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel stürzt ab | VBA

Excel stürzt ab | VBA
29.06.2020 15:57:59
Michael
Guten Tag zusammen,
ich habe eine Frage zu meinem Makro.
Link zur Excel Datei: https://www.herber.de/bbs/user/138633.xlsm
In der Exceldatei (Mappe: Tabelle1) sind zwei Tabellen vorhanden. Der linken Tabellen fehlen Informationen in den Spalten "Listenpreis und Leistung". In der rechten Tabelle befinden sich diese Infos. Sobald ich auf Schaltfläche 1 - Button drücke, wird die linke Tabelle um die Informationen ergänzt, die in der rechten Tabellen enthalten sind. Dabei wird der Modellname geprüft und ob das Baujahr in einer gewissen Spanne befindet. Gerne in der Excel-Datei ausprobieren.
Nun befinden sich in beiden Tabellen nur insgesamt wenige Zeilen/Datensätze. Alles funktioniert einwandfrei! Sobald aber eine Vielzahl an Daten eingefügt werden, stürzt das Programm (Excel) ab und es erfolgt keine Rückmeldung.
Gibt es hierfür eine Lösung? An sich funktioniert das Makro, aber mit zu vielen Daten kommt es nicht zurecht. Hat jemand eine Idee?
Es geht um folgendes Makro:

Sub Zuordnen()
Dim rTab1           As Range, rTab2     As Range
Dim lZeile1         As Long, lZeile2    As Long
Dim Modell
Dim Baujahr         As Long
Dim lModellworte    As Long
Set rTab1 = ActiveSheet.Range("A1")     'Anpassen (Tabelle1 Erste Zelle Links oben)
Set rTab2 = ActiveSheet.Range("H1")     'Anpassen (Tabelle2 Erste Zelle Links oben)
Set rTab1 = Range(rTab1.End(xlToRight), rTab1.End(xlDown))
Set rTab2 = Range(rTab2.End(xlToRight), rTab2.End(xlDown))
For lZeile1 = 2 To rTab1.Rows.Count
Modell = Split(rTab1(lZeile1, 2))
Baujahr = rTab1(lZeile1, 3)
For lZeile2 = 2 To rTab2.Rows.Count
For lModellworte = LBound(Modell) To UBound(Modell)
If InStr(1, rTab2(lZeile2, 1), Modell(lModellworte), vbTextCompare) = 0 Then _
Exit For
Next lModellworte
If lModellworte = UBound(Modell) + 1 Then
If rTab1(lZeile1, 3) >= rTab2(lZeile2, 3) And rTab1(lZeile1, 3) 
Vielen Dank im Voraus!
Viele Grüße
Michael

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel stürzt ab | VBA
29.06.2020 17:12:43
onur
Wofür soll das denn deiner Meinung nach gut sein?
Modell = Split(rTab1(lZeile1, 2))

AW: Excel stürzt ab | VBA
29.06.2020 17:43:36
Michael
Hey onur,
ich kann dir das leider gar nicht genau sagen. Ich muss dazu sagen, dass es jemand für mich gemacht hat, aber ich mit der Person keinen Kontakt mehr aufbauen kann.
Wie würdest du es anders lösen?
VG und Danke!
AW: Excel stürzt ab | VBA
30.06.2020 23:01:09
fcs
Hallo Michael,
das Makro als solches ist ja funktionsfähig.
Bei sehr vielen Datenzeilen ist die Laufzeit aber schon sehr lang (je nach Rechengeschwindigkeit des Rechners). Dies wird verursacht durch die sehr vielen Zugriffe auf Zellen wenn die For-Next-Schleifen abgearbeitet werden.
Ein Problem gibt es, wenn die Datei aud OneDrive oder andere, SHaredDrive-Verzeichnis gespeichert wird.
Dann wird während der Makroausführung fortlaufend die Datei neu gespeichert.
Um dies zu verhindern muss das automatische Speichern der Datei während der Makroausführung vorübrtrgehend deaktiviert werden.
Eine weitere Bremse, die die Makroauführung ausbremst ist die Bildschiemaktualisierung - auch diese kann man vorüberghend deaktivieren.
Damit das Makro richtig Fahrt ausnimmt muss man die zu vergleichenden Daten und auch das Ergebnis in Arrays schreiben und die daten innerhalb des Array vergleichen und speichern.
Zum schreibt man dann die Ergebnisdaten in die Tabelle zurück.
Nachfolgend dein Makro angepasst und die Version, die mit Arrays arbeitet.
LG
Franz
Sub Zuordnen()
Dim rTab1           As Range, rTab2     As Range
Dim lZeile1         As Long, lZeile2    As Long
Dim Modell
Dim Baujahr         As Long
Dim lModellworte    As Long
Dim ModeAutoSave    As Boolean
'automatisches Speichern ggf. deaktivieren und Bildschirmaktualisierung abschalten
With ActiveWorkbook
ModeAutoSave = .AutoSaveOn = False
If ModeAutoSave = True Then .AutoSaveOn = False
End With
Application.ScreenUpdating = False
Set rTab1 = ActiveSheet.Range("A1")     'Anpassen (Tabelle1 Erste Zelle Links oben)
Set rTab2 = ActiveSheet.Range("H1")     'Anpassen (Tabelle2 Erste Zelle Links oben)
Set rTab1 = Range(rTab1.End(xlToRight), rTab1.End(xlDown))
Set rTab2 = Range(rTab2.End(xlToRight), rTab2.End(xlDown))
For lZeile1 = 2 To rTab1.Rows.Count
Modell = Split(rTab1(lZeile1, 2))
Baujahr = rTab1(lZeile1, 3)
For lZeile2 = 2 To rTab2.Rows.Count
For lModellworte = LBound(Modell) To UBound(Modell)
If InStr(1, rTab2(lZeile2, 1), Modell(lModellworte), vbTextCompare) = 0 Then _
Exit For
Next lModellworte
If lModellworte = UBound(Modell) + 1 Then
If rTab1(lZeile1, 3) >= rTab2(lZeile2, 3) _
And rTab1(lZeile1, 3) = arr2(lZeile2, 3) And arr1(lZeile1, 3) 

Anzeige
AW: Excel stürzt ab | VBA
01.07.2020 13:11:32
Michael
Hey Franz,
vielen Dank für deine Antwort! Du bist der Retter. Das mit den Arrays funktioniert super. Nun kann ich endlich große Datensätze durchjagen! :)
Wie kann ich dir nur danken? Eine Anerkennung hast du sehr verdient!
automatisches Speichern ggf. wieder aktivieren und Bildschirmaktualisierung anschalten
With ActiveWorkbook
If ModeAutoSave = True Then .AutoSaveOn = True
End With
Application.ScreenUpdating = True
Das ganze hat bei mir nicht funktioniert... Laufzeitfehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht, habe wohl eine andere Excel Version oder?
Hatte angegeben, dass ich Excel 13 habe. War falsch, habe die 2016er Version.
Viele Grüße
Michael
Anzeige
AW: Problem gelöst und Thread geschlossen
01.07.2020 14:17:10
fcs
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige