Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1500to1504
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

Makro blockiert irgendwann alle office Anwendungen

Makro blockiert irgendwann alle office Anwendungen
22.06.2016 16:56:55
giovanni
Hallo,
hab mittlerweile ein großes Problem und brauche Eure Hilfe.
Unterer Code führt Matrizen-Berechnungen durch.
Immer diesselbe Berechnung in Abhängigkeit von zwei Variablen.
Probleme dabei:
1.) Makro geht langsamer nach Umstellung auf höherer Excel Version Office Professional Plus 2013
2.) hinzu kommt wenn ich die Schleife mehrmals durchlaufe sich irgendwann Outlook aufhängt, wenn ich dann noch weitermache hängt sich dann Excel auch irgendwann auf ohne irgendeiner Fehlermeldung. Bildschirm reagiert nicht mehr. Totale Verlangsamung oder Programm reagiert nicht mehr.
Sonstige Info: CPU Auslastung bei max. 20%, Dateigröße ca. 10MB, Dauer einer Berechnung 2min
Jemand einen Plan was die Ursache sein kann?
Danke gio
Sub Berechnung()
Dim i, x, lz, sp
sp = 35 ' bis Spalte AI
Range("B15:AI34").ClearContents
For i = 2 To sp Step 1
x = 14 'To lz
Do While Cells(x + 1, 1)  ""
Application.ScreenUpdating = False
If Cells(14, i) = "" Then Exit Sub
Range("A10:B10") = ""
Range("A10") = Cells(14, i)
Range("B10") = Cells(x + 1, 1)
Range("A11").Copy
Cells(x + 1, i).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Range("B11").Copy
Cells(x + 1, i + 35).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
x = x + 1
Loop
Next i
Application.ScreenUpdating = True
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
besser mit Array
22.06.2016 17:11:23
Michael
Hi gio,
das mag ich nicht im Kopf nachvollziehen: magste mal ne abgespeckte Beispieldatei hochladen?
In A11 und B11 stehen offensichtlich Formeln, die Werte aus A10 und B10 errechnen.
Kann man so machen, aber nicht bei vielen Daten: die liest man ein Array rein, rechnet in VBA und schreibt das Array (oder ein anderes mit errechneten Werten) ins Blatt zurück.
Die Formeln in A11 und B11 lassen sich sicher in VBA umsetzen.
Schöne Grüße,
Michael

AW: besser mit Array
24.06.2016 14:44:34
giovanni
Hallo Michael,
hier abgespeckt wie gewünscht.
Im Normalfall ist im ersten Arbeitsblatt etwas Größeres.
Danke gio
https://www.herber.de/bbs/user/106493.xlsm

Anzeige
AW: besser mit Array
24.06.2016 20:14:45
Michael
HI gio,
bei Deiner Schleife gibt es ein paar Ungereimtheiten: Du schreibst ja "gleichzeitig" in den linken und rechten Bereich (Spalte+34); also muß das Makro nicht bis AQ die Spalten durchlaufen, sondern, wenn Du die Werte bis 1200 ersetzen willst, nur bis Spalte H (Nr. 8): damit werden dann sowohl die Werte in B bis H als auch in AK bis AQ übernommen.
Außerdem generiert Deine Formel von AK bis AQ spaltenweise gleiche Werte...
Die Datei: https://www.herber.de/bbs/user/106506.xlsm
rechnet jetzt mal bis "H" (das kannst Du in der Konstante oben ändern) und ist gut beschleunigt:
Sub Berechnung()
Dim s&, z&, zMax&
Dim links, rechts
Dim raus As Boolean
Dim b10 As Range, a10 As Range, b11 As Range, a11 As Range
Const abZeile = 14
Const sMax = 8 ' bis Spalte H!!!
' Const sMax = 16 ' bis Spalte P
Set a10 = Range("A10")
Set b10 = Range("B10")
Set a11 = Range("A11")
Set b11 = Range("B11")
zMax = Range("A" & Rows.Count).End(xlUp).Row
Range("B15:AQ" & zMax).ClearContents
links = Range("A" & abZeile).Resize(zMax - abZeile + 1, sMax)
rechts = Range("AK" & abZeile).Resize(zMax - abZeile + 1, sMax - 1)
Application.ScreenUpdating = False
For s = 2 To sMax Step 1
a10.Value = links(1, s)
For z = 2 To UBound(links)
If links(z, 1)  Empty Then
b10.Value = links(z, 1)
links(z, s) = a11.Value
rechts(z, s - 1) = b11.Value
Else
raus = True
Exit For
End If
Next z
If raus = True Then Exit For
Next s
'Stop
Range("A" & abZeile).Resize(zMax - abZeile + 1, s - 1) = links
Range("AK" & abZeile).Resize(zMax - abZeile + 1, s - 2) = rechts
Application.ScreenUpdating = True
End Sub
Schöne Grüße,
Michael

Anzeige
AW: besser mit Array
27.06.2016 07:49:59
giovanni
Schönen Guten Morgen Michael,
ich hoffe Du liest das hier.
Das Makro geht ab wie eine Rakete.
Du sollst den goldenen Excel Oscar bekommen.
Hatte das Problem schon 3 Jahre mit mir rumgeschliffen und jetzt ist es weg.
DANKE
und nochmal DANKE
Grüße
gio

AW: besser mit Array
27.06.2016 08:54:38
giovanni
Entschuldigung,
hab noch eine Kleinigkeit, weil mir das Makro hier hängt.
Range("A" & abZeile).Resize(zMax - abZeile + 1, s - 1) = links
In der Originaldatei habe ich ab Zeile A45 Texte und andere Sachen drinstehen.
Kann man nicht so machen dass es bis Zeile 45 rechnet bzw bis es auf der ersten leeren Zelle trifft.
zMax = Range("A" & Rows.Count).End(xlUp).Row
Danke gio

Anzeige
ok, kleine Änderung
27.06.2016 14:33:20
Michael
Hi gio,
freut mich, wenn es fetzt!
Ich habe den Code noch aufgepäppelt:
a) es wird zunächst zMax ermittelt, dann die Spalte A bis zMax in ein Array geladen und nach der ersten, leeren Zelle gesucht; zMax wird dann durch die Nr. der vorherigen Zeile ersetzt.
Dann erst werden die "großen" Bereiche in Arrays gesteckt.
b) ich habe die zwei Schleifen vertauscht: außen Zeilen, innen Spalten
Das erschien mir sicherer...
Die Datei: https://www.herber.de/bbs/user/106559.xlsm
Schöne Grüße,
Michael

Anzeige
AW: ok, kleine Änderung
28.06.2016 07:36:29
giovanni
Danke Michael,
jetzt bin ich glücklich wie die Isländer gestern
Gruss gio

freut mich,
28.06.2016 08:40:41
Michael
gio,
das Spiel war echt klasse, und den Isländern hab ich's gegönnt...
Deren Moderator wird ja auch unvergessen bleiben, hehe.
Gruß zurück,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige