Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1616to1620
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 hängt sich auf

Excel hängt sich auf
27.03.2018 22:38:16
Dörte
Hallo liebes Forum und Helfer,
ich habe folgendes Problem und hoffe auf Eure Hilfe.
In Excel 2002 habe ich ein Makro programmiert, welches nun in Excel 2010 nur noch ca. 56 mal läuft und dann hängt sich Excel komplett auf. Schließe ich Excel und öffne die Datei wieder, so läuft das Makro wieder 56 x und dann stürzt Excel wieder ab. Kann mir da jemand nen Tipp geben, woran das liegt? Ich habe ne vage Vermutung, das ne Variable volläuft, hab aber keinen Plan wo ich da suchen müßte.
Viele Grüße Dörte
So sieht mein Code aus(die Variablen habe ich in einem Extra-Modul):
Private Sub CommandButton1_Click()
pLetzte = Plist.Range("A65536").End(xlUp).Row
Application.ScreenUpdating = False
j = "KW " & WPL_Lief.Cells(7, 8)
  bei dieser Zeile springt der Debugger nach 56 Ausführungen an  
  • Set lZelle = Plist.Range("J1:BJ1").Find(j, lookat:=xlWhole, LookIn:=xlValues) 'KW spalte Call Schutz_Aus_EK_Preisliste 'preise wegschreiben in DZ-liste i = WPL_Lief.Cells(6, 8) & " " & WPL_Lief.Cells(1, 5).Value & " " & WPL_Lief.Cells( _ ActiveCell.Row, 2) Set kZelle = Plist.Range("A2:A" & pLetzte).Find(i, lookat:=xlWhole, LookIn:=xlValues) If Not kZelle Is Nothing Then If IsNumeric(TextBox1) Then Plist.Cells(kZelle.Row, lZelle.Column) = CDbl(TextBox1) 'preis Else Plist.Cells(kZelle.Row, lZelle.Column) = TextBox1.Value 'preis End If End If If kZelle Is Nothing Then Plist.Cells(pLetzte + 1, 1) = i Plist.Cells(pLetzte + 1, 2) = WPL_Lief.Cells(1, 5) 'lief.nr. Plist.Cells(pLetzte + 1, 3) = WPL_Lief.Cells(1, 4) 'lieferant Plist.Cells(pLetzte + 1, 6) = WPL_Lief.Cells(ActiveCell.Row, 1) 'wg Plist.Cells(pLetzte + 1, 7) = WPL_Lief.Cells(ActiveCell.Row, 2) 'art.nr. Plist.Cells(pLetzte + 1, 8) = WPL_Lief.Cells(ActiveCell.Row, 4) 'artikel If IsNumeric(TextBox1) Then Plist.Cells(pLetzte + 1, lZelle.Column) = CDbl(TextBox1) 'preis Else Plist.Cells(pLetzte + 1, lZelle.Column) = TextBox1.Value 'preis End If End If Call Schutz_Ein_EK_Preisliste If Label2.Caption = TextBox1.Value Then ActiveCell.Interior.ColorIndex = xlNone Else ActiveCell.Interior.ColorIndex = 15 End If If IsNumeric(TextBox1) Then ActiveCell.Value = CDbl(TextBox1) Else ActiveCell.Value = TextBox1 End If Unload Me Application.ScreenUpdating = True Cells(ActiveCell.Row + 1, ActiveCell.Column).Select End Sub

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

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Excel hängt sich auf
    28.03.2018 07:23:03
    Luschi
    Hallo Dörte,
    in dem Vba-Code ist überhaupt nicht zu erkennen, wie die verwendeten Variablen definiert sind:
    pLetzte, j, lZelle, kZelle, i
    Setze am Anfang jedes! Moduls diese Anweisung:
    Option Explicit
    oder setze in den Optionen des Vba-Editor das entsprechende Häckchen dazu. Dann ist der Codeschreiber verplichtet, jede Variable zu deklarieren.
    An der genannten Stelle kann der Debugger nur anspringen, wenn Plist.Range("J1:BJ1") nicht definiert ist. Außerdem ist es nicht gut, Übergabeparameter in einem Mischmasch von benamten und nicht benamten Parametern zu verwenden, wenn benamt, dann aber alle.
    https://msdn.microsoft.com/de-de/VBA/Excel-VBA/articles/range-find-method-excel
    in diesem Link findest Du unter Bemerkungen, welche Parameter bei jedem Suchlauf angegeben werden sollen einschließlich Begründung: LookIn, LookAt, SearchOrder und MatchByte
    Nasch jedem Find-Befehl unbedingt prüfen ob er Suchwert auch gefunden wurde:
    If Not (kZelle Is Nothing) Then (siehe dazu die Vba-Hilfe)
    Der Vba-Code würde viel professioneller aussehen, wenn Du für gleiche Sachen auch die selbe
    Schreibweise verwendest:
    mal so dann wider anders
    CDbl(TextBox1) | TextBox1.value
    WPL_Lief.Cells(6, 8) | WPL_Lief.Cells(1, 5).Value | WPL_Lief.Cells(ActiveCell.Row, 2)
    Und entscheide Dich hier nicht unbedingt auf die mögliche Minimalvariante, sondern für die ausführliche Schreibweise, daß erleichtert später das Lesen des Codes, wenn Schwierigkeiten aufatreten.
    Definierte Objektvariablen wie 'kZelle' sollte man vor Verlassen der Sub/Function mit Nothing ins Nirvana schicken. Und immer daran denken, Vba ist nicht VB.Net, denn da richtet Vieles der Roslyn-Compiler.
    So jetzt genug mit dem Gemeckere. Den Fehler ohne eine Beispieldatei zu finden ist mehr als eine Glückssache.
    Deshalb noch einen Tipp.
    Wenn beim näschaten Mal diese Zeile:
    Set lZelle = Plist.Range("J1:BJ1").Find(j, lookat:=xlWhole, LookIn:=xlValues)
    den Fehler verurscht und gelb hinterlegt ist, dann::
    - auf Debuggen klicken (nicht Abbrechen)
    - im Direkt-Fenster (Strg+G) diese Befehle eingeben
      ? Plist.Name
      ? Plist.Cells(kZelle.Row, lZelle.Column).Address
    Sollte hier der Compiler meckern, dann verurlsacht 'Plist' den Fehler, ist also nicht definiert.
    Gruß von Luschi
    aus klein-Paris
    Anzeige
    AW: Excel hängt sich auf
    28.03.2018 08:12:56
    Dörte
    Hallo Luschi,
    danke für die vielen Hinweise. Leider löst das nicht mein Problem. Die Variablen sind in einem Extra-Modul definiert, da ich diese auch anderweitig nutze und somit nur einmal definieren muß. Option Explicit ist auch in jedem Modul voran geschrieben.
    Das Makro selbt lief auf Excel 2002 einwandfrei ohne Probleme.
    In Excel 2010 läuft es 56 mal und dann ist Excel fest. Schließe ich die Datei und öffne diese wieder, dann läuft der Code wieder einwandfrei genau 56 mal.
    Die Userform ist in Tabelle WPL_Lieferant aktiviert und schreibt die Eingaben (Artikelnummer + Preis) in diese und in eine weitere Tabelle.
    Viele Grüße Dörte
    So sieht die Variablen-Definition aus:
    Option Explicit
    Option Private Module
    Public ASt As Worksheet, lIndex As Long, i, n As Integer, lZelle As Range
    Public Plist As Worksheet, iSpalte As Long, j, X As Integer, rZelle As Range
    Public Kat As Worksheet, lLetzte As Long, k, iList As Integer, kZelle As Range
    Public APlist As Worksheet, iZeile As Long, l, iIndex As Integer, mZelle As Range
    Public WPL_Pro As Worksheet, mLetzte As Long, o
    Public wks_Lief As Worksheet, jSpalte As Long
    Public DZ_Plist As Worksheet, kLetzte As Long
    Public Rank As Worksheet, pLetzte As Long, g
    Public Rank_Pro As Worksheet, oLetzte As Long, h
    Public WPL_Lief As Worksheet, jZeile As Long, p
    Public wks_ZMP As Worksheet, hLetzte As Long, m
    Public wks_EinAbg As Worksheet
    Public Sub WkSh_Set()
    Set ASt = Worksheets("Artikelstamm")
    Set Kat = Worksheets("Kategorie")
    Set wks_ZMP = Worksheets("ZMP")
    Set Rank_Pro = Worksheets("Ranking_Pro")
    Set Plist = Worksheets("EK_Preisliste")
    Set DZ_Plist = Worksheets("DZ_EK_Preisliste")
    Set APlist = Worksheets("Abgabe_Preisliste")
    Set WPL_Pro = Worksheets("WPL_Produktion")
    Set WPL_Lief = Worksheets("WPL_Lieferant")
    Set wks_EinAbg = Worksheets("Eingabe_Abgabe")
    Set wks_Lief = Worksheets("Lieferanten")
    End Sub
    

    Anzeige
    Deklarationen... und so...
    28.03.2018 09:10:34
    EtoPHG
    Hallo Dörte,
    Ich kann mich den Ausführungen von Luschi nur anschliessen. Dass das Makro mal lief, ist keine Garantie dafür das es so weitergeht. Mit der Version hat das ev. weniger zu tun, als mit der Tatsache, dass sich die Quelldaten verändert haben.
    Wenn der Debugger 'anspringt' meldet er dir auch, was der Fehlergrund ist.
    Die Vermutung "...das eine Variable volläuft" lässt mich an deinem VBA-Verständnis zweifeln.
    In den Posts sehe ich nirgends eine Definition der Variablen j, welche offensichtlich die einzige ist, die sich im monierten Befehl verändert.
    Gruess Hansueli
    Anzeige
    AW: Deklarationen... und so...
    28.03.2018 09:47:53
    Dörte
    Hallo Hansueli,
    das Makro lief nicht - sondern läuft immer noch, allerdings nur 56 mal. Wieso? Wo der Debugger anspringt habe ich dazu geschrieben. Gut dann geh ich eben stricken - so ganz ohne VBA-Verständnis.
    Viele Grüße Dörte
    AW: Deklarationen... und so...
    28.03.2018 10:22:17
    Luschi
    Hallo Dörte,
    kein Arzt, Automechaniker, Koch, usw. wird auf Grund einer Beschreibung eine Prognose abgeben.
    Das gilt auch für Vba-Code, ohne die dahinterliegende Exceldatei zu kennen.
    Wir sind keine Hellseher und gute Hilfe kann / aber muß nicht kostenlos sein.
    Gruß von Luschi
    aus klein-Paris
    AW: Excel hängt sich auf
    28.03.2018 15:20:28
    KlausF
    Hallo Dörte,
    als erstes solltest Du einmal alle Variablen so deklarieren, wie "man" sie unter Excel 2010 deklariert.
    Z.B. pLetzte = Plist.Range("A65536").End(xlUp).Row
    Excel 2010 hat wesentlich mehr Zeilen, deshalb wäre hier z.B. korrekt
    Dim pLetzte As Long
    pLetzte = Plist.Cells(Rows.Count, "A").End(xlUp).Row
    In der Zeile Public ASt As Worksheet, lIndex As Long, i, n As Integer, lZelle As Range
    ist i z.B. gar nicht dimensioniert. i, n As Integer bedeutet nicht i und n As Integer!
    Vermutlich wird i hier als Variant geführt.
    Das gleiche bei Public WPL_Pro As Worksheet, mLetzte As Long, o
    Hier steht o im luftleeren Raum.
    j soll vermutlich ein String sein ist aber ebenfalls nicht korrekt dimensioniert.
    Außerdem würde ich die Set-Anweisungen innerhalb des Codes am Ende alle wieder zurück setzen:
    Set lZelle = Nothing
    Set kZelle = Nothing usw.
    Das alles erklärt nicht warum nach 56 Durchläufen Schicht im Schacht ist. Aber es ist möglich,
    dass die Summe aller Kleinigkeiten in 2010 zum Abbruch führen. Deshalb solltest Du zuerst
    den Code auf Augenhöhe bringen.
    Gruß
    Klaus
    Anzeige
    AW: Excel hängt sich auf
    28.03.2018 16:19:09
    Dörte
    Hallo Klaus,
    danke für deine Antwort.
    Die Datei ist 2010 erstellt worden und läuft seitdem unter Excel2002. Deshalb haben wir beim Umstieg diese Datei unter dem Format Excel97-2003 abgespeichert, damit sie auch weiter läuft. Soweit funktionieren auch alle anderen Makros. Die Datei ist sehr umfangreich, deshalb habe ich auch keine Beispieldatei. Die Variablen haben auch alle Werte drin, das habe ich mit dem Debugger schon getestet.
    Die Userform wird aufgerufen indem ich Zelle G5 anklicke,dann schreibe ich den Preis über einen Button in Zelle G5 und schließe über einen Button die Userform. Durch das Schließen der UF wähle ich Zelle G6 aus und schreibe den Preis in Zelle G6.
    Das ganze wiederholt sich immer wieder. UF aufmachen, Preis eintragen; UF zumachen. Also die UF wird 56 geöffnet und geschlossen. Der gleiche Code funktioniert 56 mal. Und beim 57 mal hängt sich Excel auf. Was mich dann auch wundert, ich schließe dann die Datei und öffne sie wieder und kann an der abgebrochenen Stelle weiter machen, als wenn nichts gewesen wäre - aber wieder nur 56 mal.
    Habe ich einen kleineren Lieferanten mit weniger als 56 Artikel gibt es keine Probleme. Da kann ich einen nach dem anderen von aufrufen und eintragen. Erst wenn ein großer Lieferant kommt, streikt Excel.
    Den Code werde ich auf Augenhöhe bringen, nur stehen momentan die Feiertage und Grillsaison vor der Tür. Somit bin ich anderweitig beschäftigt und versuche, die Dinge am laufen zu halten.
    Viele Grüße Dörte
    Anzeige
    AW: Excel hängt sich auf
    28.03.2018 22:06:30
    Dörte
    Hallo Klaus,
    ich habe nochmal gegoogelt und dieses Problem ist schon öfter aufgetreten - allerdings nirgends gelöst worden.
    Dies meldet der Debugger:
    Laufzeitfehler - 2147417848 (80010108)
    Die Methode "Find" für das Objekt 'Range' ist fehlgeschlagen.
    Die Variablen sind alle richtig gefüllt, habe das eben einzeln ausgetestet mit ner Msg-Box.
    Viele Grüße Dörte
    Format Excel97-2003
    28.03.2018 23:07:49
    KlausF
    Hallo Dörte,
    die Datei ist aber jetzt auf Excel 2010 gespeichert worden, oder?
    Ich stolpere nämlich gerade über diesen Satz in Deinem vorletzten Post:
    [ Deshalb haben wir beim Umstieg diese Datei unter dem Format Excel97-2003 abgespeichert, damit sie auch weiter läuft ]
    Ich würde ansonsten in jedem Falle auch einmal einen Test machen mit einer "reinen" Excel 2010-Datei.
    Ist nur so ins Blaue geschossen und sollte "eigentlich" auch nichts entscheidendes verändern.
    Aber wer weiß das schon ...
    Gruß
    Klaus
    Anzeige

    112 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige