Moin,
es ist vielleicht kein spezielles Excel-Problem ( Win7 ? ):
Beim Abarbeiten eines langwierigen vba-Makros fällt mir aber besonders auf, dass oben im Excel-Fenster regelmäßig „Keine Rückmeldung“ angezeigt wird.
Nach der Abarbeitung ist dann wieder Alles i. O.
Meine Fragen:
kann man den Aussetzer von Excel gegenüber dem BetriebsSystem verhindern?
kann das Ergebnis der Berechnung beeinträchtigt werden?
Ich lasse den folgenden Code laufen:
Sub gleiche_ausblenden_down()
LR = ActiveCell.SpecialCells(xlLastCell).Row: LC = ActiveCell.SpecialCells(xlLastCell).Column
AR = ActiveCell.Row: AC = ActiveCell.Column
’ R1 = IIf(.Cells(1, 20).Value = 0, 9, .Cells(1, 20).Value)
R1 = 9 ’ R1=9:Überschriften NUR OBERHALB Zeile 9!!! Zeile 9 ist z. Zt. die MusterZeile ( Formate )
counter = 0
Call gmst
For zeile = R1 To LR
For i = zeile + 1 To LR
’ If Cells(i, AC) „“ Then
If Cells(i, AC) = Cells(zeile, AC) Then
If Rows(i).EntireRow.Hidden = True Then counter = counter + 1
Application.StatusBar = „Ausgeblendet:“ & counter
Rows(i).EntireRow.Hidden = True
End If
’ End If
Next i
Next zeile
Cells(AR, AC).Select
Call gmsf
End Sub
Die UnterProgramme sind mit Hilfe von Reinhard entstanden und schalten zwecks ZeitEinsparung Einiges ab. Haben immer gut funktioniert
Public Static Sub GetMoreSpeed(Optional ByVal Modus As Boolean = True)
Dim intCalculation As Integer, bolSperre As Boolean
If Modus = True Then
intCalculation = Application.Calculation
bolSperre = ActiveSheet.ProtectContents
ActiveSheet.Unprotect
Else
If bolSperre = True Then ActiveSheet.Protect
End If
With Application
.ScreenUpdating = Not Modus
.EnableEvents = Not Modus
.Calculation = IIf(Modus = True, xlManual, intCalculation)
.Cursor = IIf(Modus = True, xlWait, xlDefault)
End With
End Sub
Sub gmst()
Call GetMoreSpeed(True)
End Sub
Sub gmsf()
Call GetMoreSpeed(False)
End Sub
Angezeigt wird jedoch bis zum „Absturz“ immer aktuell der ZählerStand per application.statusbar.
Wer blickt durch?
Vielen Dank für Dein Interesse.
Freundliche Grüße
Thomas
P.S.: Falls der Autor der vorherigen Threads noch interessiert ist:
der Code sucht in der aktiven Spalte nach Duplikaten und blendet die gefundenen Zeilen aus.
doevents
Hallo power_blue,
vielen Dank für Deine Antwort. Aber wird dadurch nicht genau das Gegenteil bewirkt wie durch das „get_more_speed“-Makro?
Ich weiß auch nicht genau, wo man „doevents“ genau einfügen sollte
Wäre für einen weiteren Hinweis dankbar.
Freundliche Grüße
Thomas
es ist vielleicht kein spezielles Excel-Problem ( Win7 ? ):
Beim Abarbeiten eines langwierigen vba-Makros fällt mir aber
besonders auf, dass oben im Excel-Fenster regelmäßig „Keine
Rückmeldung“ angezeigt wird.
Hallo Thomas,
Powerblue hat dir ja schon DoEvents genannt. Hier ist ein Thread wo
ein wenig auf mögliche Ursachen eingegangen wird.
Hallo reinhard,
vielen Dank für Deine Antwort und den Link.
Zumindest tröstet mich, dass da auch keiner voll durchblickt
Ich werde das ´mal probieren mit alle 100-1000 Durchläufe „doevents“ sagen.
Meistens „fängt sich“ das Ganze ja auch wieder und das Ergebnis kommt irgendwann. Man ist aber erst´mal verunsichert. Ungeduldige Menschen brechen womöglich mit Alt-F4 ab
PS: Betreffänderung wegen hiesiger Archivsuche
Ich ändere oft den Betreff, besonders, wenn ich auf ein TeilProblem eingehe - das erhöht nach m. Meinung in längeren Diskussionen die Auffindbarkeit
Ob man das Einfrieren unbedingt mit application.statusbar in Verbindung bringen muss, weiß ich nicht. Vielleicht finde ich ja noch ein Beispiel ohne dies.
ich habe mir nicht angesehen, was deine Scripte so machen, nur dass sie Schleifen enthalten.
Excel steuert selbst, wofür die zugewiesene Prozessorzeit genutzt wird. Wenn du ein Schleife hast, kann es sein, dass Excel seine Zeit mit der Bearbeitung der Schleife verbringt, statt hin und wieder z. B. den Bildschirm zu aktualisieren.
Doevents sorgt dafür, dass auch andere Sachen, die abgearbeitet werden wollen, „dran kommen“.
Füge einfach in einer neuen Zeile innerhalb der Schleifen
doevents
ein.
Kannst es ja mal ausprobieren, wenn es davon langsamer wird, kannst du es wieder rausnehmen.
Hallo power_blue,
habe das „doevents“ in die äußere Schleife geschrieben, klappt ganz gut und wird nicht so viel langsamer
Was die zugewiesene RechenZeit anbetrifft, sind sich die SoftWareHäuser MicroSoft und
MicroSoft wohl nicht ganz einig
Aber so geht´s erst´mal, vielen Dank und schönen Tag
Thomas
Was die zugewiesene RechenZeit anbetrifft, sind sich die
SoftWareHäuser MicroSoft und
MicroSoft wohl nicht ganz einig
Die sind sich schon einig. Windows weist von der Prozessorzeit einen betimmten Teil Excel zu. Dafür was Excel mit dieser Zeit mach, ist Excel selbst verantwortlich. In den Verantwortungsbereich von Excel fällt sowohl die Berechnung der Schleife als auch das Aktualiseren seines Fensterinhalts sowie die Kommunikation mit Windows.
Wenn jetzt Excel nichts anderes macht, als die Schleife bearbeiten, wird der Fensterinhalt vernachlässigt, und auch Anfragen des Betriebssystems werden erst mal nicht beantwortet.
Wenn jetzt Excel nichts anderes macht, als die Schleife
bearbeiten, wird der Fensterinhalt vernachlässigt, und auch
Anfragen des Betriebssystems werden erst mal nicht
beantwortet.
Das wusste ich nicht. Hatte immer geglaubt, dass das BetriebsSystem schon mitkriegt, wenn ein Programm am Arbeiten ist und den BildschirmInhalt verändert. Ist aber letzendlich egal, denn das Ergebnis für den User ist ja, dass diesem vorgegaukelt wird, sein Excel wäre eingefroren. Das finde ich eben noch nicht optimal.
Das Positive an der ganzen Sache ist, dass anscheinend die Ergebnisse der Berechnungen nicht darunter leiden ( außer, wenn es zum endgültigen Absturz kommt ).
Jedenfalls Dir vielen Dank für die Info und herzliche Grüße
Thomas