Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: sporadischer VBA-crash - Activate statt Select nehmen?

sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 12:58:40
Martin
Ich führe in einer Datei einen Code aus, der lange läuft, weil ein Check über 1000 Zeilen läuft . Derweil wird mit Application.StatusBar die gerade geprüfte Zeile angezeigt. Nachdem die for/next-Schleife abgeschlossen ist, wird

    

Application.StatusBar = False
If found > 0 Then
MsgBox "Es wurden " & found & " suspekte Positionen gefunden!", vbCritical
ThisWorkbook.Sheets("Report").Visible = True
ThisWorkbook.Sheets("Report").Select
Else
MsgBox "Es wurde keine suspekte Position gefunden!", vbInformagtion
End If

ausgeführt. Solange ich Excel in Ruhe arbeiten lasse, gibt es keine Probleme. Bei gefundenen Treffern wird automatisch das Tabellenblatt Report eingeblendet und über 'Select" darauf gewechselt, so dass es angezeigt wird. Wenn ich aber währenddessen eine andere Exceldatei geöffnet habe, kommt es sporadisch zu einem Crash. Der Debug-Modus verweist dann auf die Select-Zeile.

Die genaue Fehlermeldung habe ich jetzt leider nicht zur Hand, weil ich ausgerechnet jetzt den crash nicht nachstellen kann. Es war aber irgendwas mit fehlendem Objekt.
Ich hätte jetzt eigentlich gedacht, das ThisWorkbook sich immer auf die Datei bezieht, in dem das Makro gestartet wurde. Insofern verstehe ich nicht, weshalb es dann ein Problem ist, wenn ich in einer anderen Datei am gange bin.
Sollte ich besser Activate statt Select nehmen?
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 13:05:31
Oberschlumpf
Hi Martin,

Sollte ich besser Activate statt Select nehmen?

Anstelle hier zu fragen, wieso hast du es denn nicht schonmal ausprobiert?
Wenn weiterhin "VBA-Crash", dann hilft wohl auch Activate nicht - aber DAS wüsstest du bei Selbstversuch schon selber.
Wenn kein "VBA-Crash", dann war Activate wohl die richtige Wahl - aber DAS wüsstest du bei Selbstversuch schon selber..ups, hab ich das nicht schon mal geschrieben?

Was genau dauert denn bei deinem Check so lange?
Denn für Excel sind 1000 Zeilen eigentlich n Klacks - innerhalb von Milli-sekunden erledigt ;-)

Wenn du weiterhin nicht weiterkommst, zeig bitte per Upload eine Bsp-Datei mit genügend Bsp-Daten in den richtigen Zeilen/Spalten...und den Code, der deinen "Check" durchführt.

Ciao
Thorsten
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 13:22:34
Onur
 If found > 0 Then

ThisWorkbook.Sheets("Report").Visible = True
MsgBox "Es wurden " & found & " suspekte Positionen gefunden!", vbCritical
ThisWorkbook.Sheets("Report").Select
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 14:01:56
daniel
Hi

Select und Activate funktionieren immer nur im aktiven übergeordneten Element.
wenn du ein Sheet(...).Select ausführst dann muss schon das passende Workbook aktiv sein. du kannst damit nicht Workbook und Sheet gleichzeitig selektieren.

du musst also erst das Workbook selektieren und dann das Sheet.
also
Thisworkbook.Activate

Thisworkbook.Sheets("Report").Select


eine Selektion über mehrere Ebenen hinweg ist nur für ein Zellobjekt möglich mit dem Befehl Application.Goto
Application.Goto ThisWorkbook.Sheets("Report").Range("A1")


Gruß Daniel
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 14:06:47
Martin
Danke, so scheint es zu funktionieren:

    If found > 0 Then

ThisWorkbook.Activate
ThisWorkbook.Sheets("Report").Visible = True
MsgBox "Es wurden " & found & " suspekte Positionen gefunden!", vbCritical
ThisWorkbook.Sheets("Report").Select
Else
MsgBox "Es wurde keine suspekte Position gefunden!", vbInformagtion
End If


Ich habe das jetzt mal als erledigt gesetzt und bedanke mich bei allen!
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 13:28:48
Martin
@Onur: Meinst Du, dass der Select-Befehl hier ins Leere läuft, da der vorhergehende Visible-Befehl nicht schnell genug ausgeführt wurde? Dass also die zwichengeschaltete MsgBox, die ja noch bestätigt werden muss, für eine zeitliche Entzerrung sorgt?
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 13:45:17
volti
Hallo Martin,

mal ein Erklärungsversuch.

In diesem Fall bezieht sich das SELECT natürlich auf die Mappe, in dem das Makro läuft.
Aber m.E. kann ein Blatt nur in der aktiven Mappe selektiert also sichtbar gemacht werden. Heißt, erst die Mappe mit dem Makro zur aktiven Mappe machen (Select oder Activate), dann sollte es gehen.

ThisWorkbook.Select

ThisWorkbook.Sheets("Report").Select


oder auch
ThisWorkbook.Select

Sheets("Report").Select


Gruß
Karl-Heinz
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 13:58:06
Martin
hmm.. klang plausibel, aber jetzt crasht es mit Laufzeitfehler 438 (Objekt unterstützt diese Eigenschaft oder Methode nicht) bei ThisWorkbook.Select

    If found > 0 Then

MsgBox "Es wurden " & found & " suspekte Positionen gefunden!", vbCritical
ThisWorkbook.Select
Sheets("Report").Visible = True
Sheets("Report").Select
Else
MsgBox "Es wurde keine suspekte Position gefunden!", vbInformagtion
End If
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 14:00:18
Onur
Karl-Heinz hat natürlich völlig Recht !
Du musst nicht ThisWorkbook.Select nehmen sondern ThisWorkbook.Activate.
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 14:11:29
Crazy Tom
moin,

warum muss das Blatt denn überhaupt aktiviert/selected werden?

mfg Tom
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 14:37:15
daniel
aus dem Blattnamen und der Messagebox würde ich ableiten, dass die "suspekten" Posititionen auf dem Blatt "Report" aufgelistet sind und sinnvollerweise auch angezeigt werden.
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 13:34:28
Onur
Vermutlich stolpert Excel wieder mal über die eigenen Füße.
Aber eine MsgBox könnte helfen, wenn während des Wartens die anderen Aufgaben erledigt werden.
Notfalls mit einer kleinen Warteschleife :
ti=Timer

While Timer-ti 0.1 : DoEvents : Wend
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 13:21:37
Martin
Natürlich habe ich das probiert, und es tritt bei meinen Tests jetzt kein Crash auf. Da das aber im Normalfall auch mit Select nicht passiert, ist es keine Gewähr, dass das Problem damit behoben wurde. Leider tritt der Crash nur sporadisch auf und ist deshalb schwer reproduzierbar.
Bei dem Check wird Zeile für Zeile für die darin enthaltene Personalnummer eine Abfrage an einen Adress-Server gesandt und dessen Antworten auf Plausibilität geprüft. Das dauert leider bei 1000 Mitarbeitern schon mal 5 Minuten. Der Code ist auch nicht das Problem. Der Crash kommt erst am Ende, wenn die Schleife schon durch ist und das Resultat angezeigt werden soll.
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
24.05.2024 07:55:25
Oppawinni
Weder noch, würde ich sagen.
Dimensioniere eine Variable, der du das Worksheet Objekt zuweist und benutze z.B. dieses Objekt an Stelle von ActiveSheet...
usw.
Damit greift dein Programm dann nicht womöglich plötzlich auf ein völlig falsches Objekt zu, weil du da parallel irgendwas öffnest.
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 13:38:05
Oberschlumpf
na ja, ein Hinweis, DASS du meine 1. Idee schon getestet hast, wäre nicht schlecht gewesen.

Eine Bsp-Datei, so mit genügend Datenzeilen gefüllt (hier wohl tatsächlich 1000), dass die Datei auch für uns testbar ist, hast du leider noch nicht gezeigt....und deinen vollständigen, nur dafür notwendigen Code auch nicht.

So bleibt uns weiterhin nur übrig, Lösungsideen zu erraten.
Zumindest ich bin aber im Erraten schon immer...nicht gut.
Is aber nich schlimm...dann wartest du einfach auf die Antworter, die auch ohne Test-Datei arbeiten können.

...aber n kleinen Tipp hab ich doch noch: Jede Antwort könnte mit einer Begrüßung beginnen und mit einem "Ciao" oder ähnlich enden...
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 15:02:04
Marc
Also auch bei 1000 Mitarbeiterin und entsprechende Sendung an einen Server dauert das nicht 5 Minuten um das ab zu arbeiten..

mir scheint darin schon ein Code Problem zu sein.

Ich habe nur geringfügig mehr MA Daten vorhanden (etwa 4000-5000) und ein Testdurchlauf mit Abfrage der Personaldaten dauert hier keine 5 Minuten...

Aber zum Problem zurück.

Hier würde die Implementierung eines Fehlermanagementsystems helfen..

a) abfangen von Crashes (hier zu unterscheiden ist es ein Excel Crash oder ein Verbindungscrash zu Server)
b) Ausgabe des Fehlers in entweder MsgBox Oder sinnvoller in einer Permante Form in einer DB oder in Excel selber...
c) deklarieren wie es nach dem Fehler weiter gehen soll.., ( resume next, oder Exit sub oder sonst was)

Wenn der Fehler nur sporadisch auftritt, könnten es ein Verbindungsproblem mit dem Server geben (hier könnte es sein, das TimeOut Verzögerungen gibt, oder Verbindungen nicht richtig aufgebaut/beendet werden... hier wäre Transaction ein Thema --> greifen mehrere gleichzeitig auf die DB zu)
Es kann aber auch sein, das ein Wert (explizite Umwandlung von Variablen) nicht immer richtig funktioniert... --> auch hier Fehlerbehandlung/Fehlermanagement..

werden eventuelle Variablen richtig getestet ob sie dem Datentyp der ZielVariable entsprechen ? z.B. String nach Integer..

Es gibt so viele Stellen, wo was nicht funktionieren kann,

das muss nicht unbedingt mit Activate oder Select zu tun haben ...--> das kann nur das Ergebnis sein, aber nicht unbedingt das Problem
Anzeige
AW: sporadischer VBA-crash - Activate statt Select nehmen?
23.05.2024 16:12:00
schauan
Hallöchen,

also, mal ein paar Hinweise:

1)
Wenn Du was Zeile für Zeile prüfen musst, solltest Du mal überlegen, die Daten in ein Array zu nehmen und dieses abzuarbeiten.,

2)
Wenn Du in einer Datei ein Makro laufen hast und zugleich in einer anderen Office-Datei manuell arbeiten willst, solltest Du in der Makrodatei auf "Benutzer" - Aktionen wie Aktivieren, Selektieren, Kopieren, Einfügen usw. verzichten. Da könnten sich Aktionen zwischen den beiden Dateien überschneiden und sonst was für Effekte auslösen, eben auch Deinen Crash.
Gibt aber auch lustige Effekte. Wenn Du z.B. gerade ein Word-Dokument bearbeitest, was kopierst, und brauchst etwas Zeit, bis Du es in Deinem Dokument einfügst, und Excel kopiert zwischenzeitlich auch, dann hast Du ungewollt ggf. eine Exceltabelle im Dokument :-)
--> Wenn Du viele derartige "automatische" Aufgaben hast, wäre eventuell ein Zweitrechner nicht verkehrt. Gibt nicht nur Arbeitsplätze mit mehreren Bildschirmen, auch mit mehreren Rechnern :-)

3)
Für eine Kontrolle musst Du nicht zur Datei wechseln und selektieren. Du könntest z.B. nur eine Meldung ausgeben oder Du fügst in einer zusätzlichen Spalte ein x ein und filterst danach. Ok, nicht Du, aber Dein Makro :-) Am Ende gibst Du nur eine Meldung aus "Fertig - alles OK!" oder bei Problemen "Fertig bitte prüfen!"

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige