Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1860to1864
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 schmiert ständig ab

Excel schmiert ständig ab
01.01.2022 12:11:53
{Boris}
Hallo zusammen,
mein Excel verabschiedet sich bei folgendem Code (ist nur ein Testcode):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Cells.SpecialCells(xlCellTypeFormulas)) Is Nothing Then
Range("A1") = Target.Address
End If
End Sub
Fehlermeldung 1004 - egal, ob ich Debugge oder Beende - Excel schließt sich sofort.
Userbild
In den VBA-Verweisen scheint auch etwas nicht zu stimmen (die Mappe habe ich vorher als .xlsm gespeichert):
Userbild
Was läuft denn da schief? Oder was muss ich wo noch wie einstellen?
Exakte Excelversion: Microsoft 365 MSO (Version 2111 Build 16.0.14701.20254) 64 Bit
VG, Boris

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel schmiert ständig ab
01.01.2022 12:35:05
ralf_b
moin und frohes Neues,
schmiert bei mir auch ab, 2019 - 32 bit
schon bei specialcells gibts Probleme wenn Keine vorhanden
auch Enableevents und Calculation abschalten bringt nicht viel.
workaround ?

If Target.Formula  "" Then
Range("A1") = Target.Address
End If

Oh la la...
01.01.2022 12:50:02
{Boris}
Hi Ralf,
ebenfalls frohes Neues!
Da scheint ja irgendwas im Argen zu liegen.
Mein Hintergrund: Ich möchte eine Mappe so gut es geht schützen ohne Blattschutz (hat spezielle Gründe) - es soll nur verhindert werden, dass man versehentlich Formeln löscht - dann soll schlicht ne Meldung kommen, ob man das wirklich will. Das Blatt hat auch ne Menge Formeln - somit "gibt" es die SpecialCells auch.
Dazu möchte ich erstmal prüfen, ob die aktuelle Selektion Formeln enthält. Na ja - und da gibt`s offensichtlich schon Probleme...
Mit Bedingter Formatierung habe ich die Formelzellen schon gemustert dargestellt - das VBA-Ereignis soll das nur noch zusätzlich "absichern".
Hmm....
VG, Boris
Anzeige
AW: dazu (m)eine gänzlich andere Möglichkeit ...
01.01.2022 13:50:12
neopa
Hallo Boris,
... für das, was Du hier als Zielstellung beschrieben hast. Bei einer gleichen Zielstellung vor längerer Zeit, half ich mir, da ich VBA nicht beherrsche, mit Standardfunktionalitäten sowie visuellen "Warnmeldungen".
In einer Tabelle wo kein Blattschutz möglich ist und ich besondere Formelzellen vor einen Überschreiben schützen wollte, kopierte ich mir deren Formeldefinition als Text in einen Hilfszellenbereich und vergleiche dann mit bedingter Formatierung dessen kopierten Text mit FORMELTEXT() der Formelzelle ohne das "=". Bei Nichtübereinstimmung "färbte" ich den Zellhintergrund und den Zellinhalt mit knallroter Farbe.
Gruß Werner
.. , - ...
Anzeige
AW: Excel schmiert ständig ab
01.01.2022 12:37:10
Herbert_Grom
Hallo Boris,
ich habe zwar kein 365, aber doch auch schon mal so eigenartige Fehlermeldungen erhalten. Nach vielen Tests bin ich dann drauf gekommen, dass einmal den PC neu gebootet, diese meist nicht mehr kamen. Ein Versuch ist es Wert.
Servus
Mit "neu booten"...
01.01.2022 12:56:24
{Boris}
Hi Herbert,
...meinst Du sicher nicht "neu starten" - denn das habe ich schon gemacht...
Das ist doch alles Murks... ;-)
VG, Boris
AW: Mit "neu booten"..oder?.
01.01.2022 13:56:59
GerdL
Prosit Neujahr @all.
Hi Boris,
ich tippe mal, du testest im neuen Jahr in einer neuen leeren Tabelle.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim C As Range
For Each C In Selection
If C.HasArray Or C.HasFormula Then
If Target.Address  "$A$1" Then
Range("A1") = Range("A1") & "|" & C.Address
End If
End If
Next
End Sub
Gruß Gerd
Anzeige
Diese Variante....
01.01.2022 14:27:33
{Boris}
Hi Gerd,
...ist mit bekannt, will sie aber nicht verwenden, da das einzelne Abklappern der Zellen bei großen Bereichen nicht praktikabel ist.
Klar - könnte vorher Target.Count abfragen und ab einer bestimmten Größe alles unterbinden - aber das sollte nur Plan C sein.
Die Specialcells scheinen im Selection-Change-Ereignis Probleme zu bereiten, da sie - so meine ich im Kopf zu haben - quasi "im Hintergrund" ein heimliches Select auslösen - und das könnte das Problem sein.
Denn als normale Sub ist das alles problemlos:

Sub test()
If Not Intersect(Selection, Cells.SpecialCells(xlCellTypeFormulas)) Is Nothing Then
Range("A1") = Selection.Address
End If
End Sub
VG, Boris
Anzeige
Prüfe zuerst...
01.01.2022 14:29:46
Beverly
Hi Boris,
...ob überhaupt Zellen mit Formeln vorkommen, denn es gibt bei Anwendung von SpecialCell (fast) immer einen Fehler, wenn dieser Zelltyp gar nicht vorhanden ist:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim varFehler
On Error Resume Next
varFehler = Cells.SpecialCells(xlCellTypeFormulas).Count
On Error GoTo 0
If Not IsEmpty(varFehler) Then
If Not Intersect(Target, Cells.SpecialCells(xlCellTypeFormulas)) Is Nothing Then
Range("A1") = Target.Address
End If
End If
End Sub
Bis später
Karin

Anzeige
AW: Excel schmiert ständig ab
01.01.2022 15:12:14
EtoPHG
Hallo Boris,
Das Problem: Die Specialcells-Methode löst einen Selection_Change Event aus!
Darum würde ich dringend auf diese Methode verzichten und ev. das in Betracht ziehen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.HasFormula
Case True
Msgbox "Target besteht nur aus Formel(n)",, Target.Address
Case False
Msgbox "Target enthält keine Formel(n)",, Target.Address
Case Else
Msgbox "Target enthält mindestens 1 Formel",, Target.Address
End Select
End Sub
Gruess Hansueli
Anzeige
Das läuft nicht...
01.01.2022 21:35:30
{Boris}
Hi Hansueli,
danke für den Anstoß - aber die 3 Cases sind nicht zuverlässig und liefern falsche Ergebnisse.
Die Specialcells-Methode löst einen Selection_Change Event aus
Danke für die Bestätigung meiner in der anderen Antwort geäußerten Vermutung!
VG, Boris
AW: Excel schmiert ständig ab
01.01.2022 18:23:16
Sulprobil
Hallo,
ich würde in einer Event Routine immer erst die Events ausschalten und dann die Fehler abfangen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
On Error GoTo ErrHdl
If Not Intersect(Target, Cells.SpecialCells(xlCellTypeFormulas)) Is Nothing Then
Range("A1") = Target.Address
End If
ResumeHere:
Application.EnableEvents = True
Exit Sub
ErrHdl:
If Err.Number = 1004 Then
Resume ResumeHere
End If
'Other error - terminate
Application.EnableEvents = True
On Error GoTo 0
Resume
End Sub

Anzeige
AW: Klar, gehts kompliziert auch ;-) (owT)
01.01.2022 18:48:51
EtoPHG

Vielen Dank Euch allen...
02.01.2022 15:41:36
{Boris}
Hi,
...mit dem vorherigen Ausschalten der Events bin ich dann letztlich zum Ziel gekommen.
VG, Boris
AW: Vielen Dank Euch allen...
02.01.2022 19:07:41
Yal
Moin zusammen,
@Sulprobil: so ein Art von Try-Catch-Finally Pattern, nur mit anderen Bezeichnungen und Reihenfolge, oder?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Try:
On Error GoTo Catch
Application.EnableEvents = False
If Not Intersect(Target, Cells.SpecialCells(xlCellTypeFormulas)) Is Nothing Then
Range("A1") = Target.Address
End If
GoTo Finally
Catch:
Select Case Err.Number
Case 1004
Resume Finally
Case Else
End Select
Finally:
Application.EnableEvents = True
End Sub
VG
Yal
Anzeige
Try-Catch-Finally Pattern
02.01.2022 20:22:05
Sulprobil
Hallo Yal,
Ja, aber ich würde doch im CASE ELSE Fall mit

ON ERROR GOTO 0
RESUME
ohne vorheriges

Application.EnableEvents = True
auf einen Fehler laufen wollen.
Das müssten wir beide noch anpassen.
Viele Grüße,
Bernd
AW: Try-Catch-Finally Pattern
02.01.2022 20:51:49
Yal
Hallo Bernd,
Vollkommen und richtig, jedoch da die On Error nur innerhalb einer Sub/Function gilt, könnte man den Reset auf Goto 0 als überflüssig betrachten, wenn keine wesentliche Anweisung dahinter stattfindet.
Resume ohne Argument sagt, dass die fehlerhafte Anweisung wieder probiert werden sollte. Was in den Fall keinen Sinn ergeben würde.
Resume Finally zwingt zum Sprung auf Finally.
Im gegebenen Fall ergeben beiden keinen Sinn, es sei denn, es passiert tatsächlich was in case else.
Was eventuell fehlt, ist einen Err.Clear. Ein Err.Clear ist notwendig, wenn zwischen den On Error Resume Next und den On Error Goto 0 ein Fehler entstanden ist. Ich habe es, glaube ich, noch nie eine Situation gehabt, wo es notwendig war. Aber es ist sinnvoll, wenn Fehlerhandlung gefragt wird, nur kurze Sub/Function zu implementieren.
VG
Yal
Anzeige
AW: Try-Catch-Finally Pattern
02.01.2022 22:14:58
Sulprobil
Hallo Yal,
Falls Du einen anderen Fehler als 1004 vorliegen hast, willst Du hoffentlich genau bei dessen Ursprung mit der richtigen Meldung auf die Nase fliegen und nicht in einer ErrHdl Endlosschleife landen.
Mach Dir mal die Freude und teste es aus.
Have fun,
Bernd
AW: Excel schmiert ständig ab
02.01.2022 11:27:51
GerdL
Moin Boris!
Binde doch deinen Code ein.

'Modul Tabelle
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
Call test(Target)
Application.EnableEvents = True
End Sub
'allgemeines Modul
Sub test(objSel As Range)
Dim rngFormulas As Range
If ActiveSheet.UsedRange.Address  "$A$1" Then
On Error Resume Next
Set rngFormulas = Cells.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
If Not rngFormulas Is Nothing Then
If Not Intersect(objSel, Cells.SpecialCells(xlCellTypeFormulas)) Is Nothing Then
Range("A1") = objSel.Address
End If
End If
End If
End Sub
Gruß Gerd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige