Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1896to1900
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

Laufzeitfehler 2147417848 .find

Laufzeitfehler 2147417848 .find
08.09.2022 11:47:07
Marius
Hallo zusammen,
ich habe mein Projekt hochgeladen:
https://www.herber.de/bbs/user/155056.xlsm
Das Makro funktioniert einige Male einwandfrei, doch nach ca. 30 Durchläufen (Regal wählen, Fach wählen, Daten speichern) kommt der Laufzeitfehler 2147417848.
Genauer ist der Fehler auf den Code in Userform3 einzugrenzen:
With Application.Worksheets(1).Columns(4)
Set c = .Find("A318-1", LookIn:=xlValues)
Dabei spielt es auch keine Rolle welche Regale und Fächer ausgewählt werden. Meine Vermutung ist, dass ich an irgendeiner Stelle einen Speicher zumülle und nie leere, nur ich weiß nicht wo und wie. Eventuell das Array platz(q).
Ich habe (wie auch in der Beispieldatei) die Variable platz(q) aus .find herausgenommen und durch ""A318-1" ersetzt, aber dennoch will er nicht.
Ich bin um jede Hilfe dankbar, denn Googlen war ohne Erfolg.
Danke und Grüße,
Marius

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 2147417848 .find
08.09.2022 13:31:04
ChrisL
Hi Marius
Die ganze Angelegenheit ist noch diffus. Ich kann den Fehler nicht rekonstruieren und zudem ist das ganze Projekt für meinen Geschmack zu umfangreich, um durchzublicken.
Aus dem holen Bauch heraus würde ich weniger auf ein Speicherproblem tippen. Ich würde eher annehmen, dass zum Zeitpunkt des Fehlers eine andere Mappe oder Applikation aktiv ist, wobei ich zugegeben auf Basis dieser Vermutung keinen Fehler provozieren konnte.
Vorschläge:
Ändere
Application.Worksheets(1).Columns(4)
in
ThisWorkbook.Worksheets(1).Columns(4)
Falls es nicht hilft, versuche den Fehler weiter einzugrenzen. Gibt es zum Zeitpunkt des Fehlers Auffälligkeiten z.B. eine andere Session/Applikation ist aktiv? Lässt sich der Fehler auf allen Rechnern auch mit unterschiedlichen Excel-Versionen rekonstruieren? Kannst du den gleichen Fehler in einer neuen "Dummy-Datei" provozieren?
Wenn du damit nicht weiterkommst, würde ich dir empfehlen eine soweit irgendwie möglich abgespeckte Beispieldatei ins Forum zu laden. Einerseits schliesst du damit Fehlerursachen aufgrund von Zusammenhängen mit anderen Codes/Tabellen etc. aus. Andererseits erleichterst du die Fehlersuche für dich und fürs Forum, wenn du das Problem reduzierst und rekonstruierbar (wiederholbar) machst.
cu
Chris
Anzeige
AW: Laufzeitfehler 2147417848 .find
08.09.2022 15:35:51
Luschi
Hallo Marius,
Dem Klassenmodul 'clsButtons' fehlt das Terminate-Ereignis, damit die erzeugten Klassenobjekte wieder zerstört werden:

Private Sub Class_Terminate()
Set Btn = Nothing
End Sub
Gruß von Luschi
aus klein-Paris
AW: Laufzeitfehler 2147417848 .find
09.09.2022 07:12:01
Marius
Hallo Chris und Luschi,
anbei eine vereinfachte Version meines Problems.
https://www.herber.de/bbs/user/155068.xlsm
Einfach Schaltfläche 1 und "Speichern" oft klicken, dann taucht der Fehler bei mir reproduzierbar auf.
Es spielt keine Rolle auf welchem Rechner. Andere Dateien sind nicht geöffnet. Auch wenn ich als andere Excel-Versionen speicher taucht das Problem auf.
@Luschi an so etwas habe ich gedacht, aber das löst das Problem leider nicht. oder ich bin zu doof es richtig einzusetzen ;)

'UserForm1 Auswahl an Fächern
Dim colButtons As New Collection
Private Sub UserForm_initialize()
Dim ctl As MSForms.Control
Dim obEvents As clsButtons
For Each ctl In Me.Controls
If TypeOf ctl Is MSForms.CommandButton Then
Set obEvents = New clsButtons
Set obEvents.Btn = ctl
colButtons.Add obEvents
End If
Next ctl
End Sub

'UserForm2 Eingeben der Daten und Speichern
Public Sub CommandButton1_Click()
Dim p As Integer
Dim platz(1 To 2)
p = 0
For q = 1 To 2
platz(q) = Fach & q
With Worksheets(1).Columns(4)
Set c = .Find(platz(q), LookIn:=xlValues)
n = 1
If q = 1 Then
n = q
Else
n = q * 2 - 1
End If
If Not c Is Nothing Then
c.Offset(0, 1).Value = Controls("TextBox" & n).Value
c.Offset(0, 2).Value = Controls("TextBox" & n + 1).Value
End If
End With
Next q
Unload Me
UserForm1.Show
End Sub
Public Sub UserForm_initialize()
Dim p As Integer
Dim platz(1 To 2)
p = 0
For q = 1 To 2
platz(q) = Fach & q
With Application.Worksheets(1).Columns(4)
Set c = .Find(platz(q), LookIn:=xlValues)
n = 1
If q = 1 Then
n = q
Else
n = q * 2 - 1
End If
If Not c Is Nothing Then
Controls("TextBox" & n).Value = c.Offset(0, 1).Value
Controls("TextBox" & n + 1).Value = c.Offset(0, 2).Value
Else
Controls("TextBox" & n).Locked = True
Controls("TextBox" & n + 1).Locked = True
Controls("TextBox" & n).BackColor = RGB(240, 240, 240)
Controls("TextBox" & n + 1).BackColor = RGB(240, 240, 240)
Controls("TextBox" & n).Visible = False
Controls("TextBox" & n + 1).Visible = False
End If
End With
Next q
End Sub

'Klassenmodul, damit alle CommanButtons das gleiche bewirken
Public WithEvents Btn As MSForms.CommandButton
Private Sub Btn_Click()
Fach = Btn.Caption
Unload UserForm1
UserForm2.Show
Set Btn = Nothing
End Sub
Beste Grüße,
Marius
Anzeige
AW: Laufzeitfehler 2147417848 .find
09.09.2022 08:50:16
ChrisL
Hi Marius
Habe mal mit schnellem Dauerklicken zwischen UF1 und UF2 hin und her gewechselt, und tatsächlich...
Bei mir lautet die Fehlermeldung "A new guard page for the stack cannot be created", was wie von dir vermutet darauf hindeutet, dass der Arbeitsspeicher voll ist.
Habe versucht das leeren der Variable vor UF2.Show einzufügen und auch als UF1-Terminate Ereignis. Leider ohne Erfolg.
Ich lasse offen. Mit Klassenprogrammierung habe ich nicht viel Erfahrung.
cu
Chris
Klugscheisserei am Freitag
09.09.2022 21:58:16
Yal
Moin Marius,
n = q * 2 - 1 ergibt 1, wenn q = 1.
Du brauchst also keine aufwendigen if-then-else um den Sonderfall q = 1 zu behandeln.
Ansonsten könntest Du probieren, das Parameter After zu füttern ( https://docs.microsoft.com/de-de/office/vba/api/excel.range.find )

 With Application.Worksheets(1).Columns(4)
Set c = .Find(platz(q), After:=.Cells(1), LookIn:=xlValues)
VG
Yal
Anzeige
AW: Laufzeitfehler 2147417848 .find
13.09.2022 09:22:58
GerdL
Moin, ich weis leider nicht, wie der 30malige Crashtest genau ablaufen soll.
DoEvents direkt vor End Sub könnte ggf. helfen.
Gruß Gerd
AW: Laufzeitfehler 2147417848 .find
13.09.2022 13:32:36
Marius
Hallo Gerdl,
um den Fehler zu produzieren Schaltfläche 1, dann den CommandButton mit der Beschriftung "1", anschließend auf Speichern. Das ganze so lange wiederholen, bis der Fehler auftaucht.
DoEvents habe ich probiert an verschiedenen Stellen einzubauen, aber dann tauchen die UserForms nicht mehr auf.
Und kannst du den Fehler auch reproduzieren?
Beste Grüße,
Marius
AW: Laufzeitfehler 2147417848 .find
13.09.2022 14:02:48
GerdL
Nein.
Gruß Gerd
AW: Laufzeitfehler 2147417848 .find
14.09.2022 12:14:49
Michael
Hallo Marius,
Dein Problem werd ich nicht lösen können, hab mich aber auch mal durch die vereinfachte Datei geklickt. Bei mir ist der Fehler ein bislang hier nicht beschriebener
https://www.herber.de/bbs/user/155172.gif
Nach Klick auf "Debuggen" wird die Zeile "UserForm2.Show" in "Private Sub Btn_Click()" gelb markiert.
Vielleicht hilft's ja.
Viele Grüße
Michael
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige