Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1392to1396
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
Laufzeitfehler "11" Division durch Null
25.11.2014 10:46:50
Patrick
Hallo Zusammen,
ich habe mir eine Art Haushaltstagebuch zusammengebastelt (trifft es bei meinen Kenntnissen) das ich auf einer Windows-Workstation erstellt habe. Jetzt wollte ich das ganze auf meinem MacBookPro laufen lassen und ich bekomme den Laufzeitfehler "11" mit der Fehlermeldung Division durch Null.
Das komische daran ist, das es sich nicht um eine Division handelt. Der Fehler kommt bei meinem Fortschrittsbalken (Uferform) in der Zeile: Laenge3 = Laenge3 + Schritt3.
Bisher habe ich 3 Lösungen für das Problem gefunden, die ich gerne umgehen würde. Vielleicht kann es mir ja jemand erklären wo ich die Ursache finden kann.
Lösung1: Die Zeile Laenge3 = Laenge3 + Schritt3 und UfBalken.Label8.Width = Länger weg lassen. Dadurch funktioniert der Fortschrittsbalken nicht mehr so wie er soll.
Lösung2: Die Zeile Debug.Print Laenge3 vorher einfügen.
Auch wenn es der einfachste Lösungsweg ist, finde ich ihn nicht toll.
Lösung3: Die Zeile DoEvents entfernen. Damit setze ich dann aber den ganzen Fortschrittsbalken außer Betrieb weil die Ansicht nicht mehr neu aufgebaut wird.
So, hier nun der Ausschnitt in dem sich der Fehler befindet.
Sub Progressbar()
Dim AktuelleZeile As Integer
Dim AktuellZeileVon As Integer
Dim AktuellesBlatt As String
Dim MeinTyp As String
'Anzahl der zu berechnenden Zeilen/Blättern/Berechnungen
PubVar.SW1 = PubVar.NichtAktZeilenArray(1)
PubVar.SW2 = UBound(PubVar.NichtAktSeitenArray)
PubVar.SW3 = Allgemein.FuAnzahlZeilenZumAktAusArray
UfBalken.Label3.Caption = _
"0 von " & PubVar.NichtAktZeilenArray(1) & " Zeilen."
UfBalken.Label6.Caption = "0 von " & UBound(PubVar.NichtAktSeitenArray) & " Blättern."
UfBalken.Label9.Caption = "Gesammtvortschritt: 0 %"
'Wie viel kommt pro Durchlauf zum Balken dazu
Schritt1 = UfBalken.Label1.Width / PubVar.SW1
Schritt2 = UfBalken.Label4.Width / PubVar.SW2
Schritt3 = UfBalken.Label7.Width / PubVar.SW3
'Schleife über die Blätter
For Blatt = 1 To UBound(PubVar.NichtAktSeitenArray)
'Startwerte für die Variablen setzen
Laenge1 = 0
UfBalken.Label2.Width = Laenge1
'Anzahl der zu berechnenden Zeilen dieses Blattes
PubVar.SW1 = PubVar.NichtAktZeilenArray(Blatt)
'Wie viel kommt pro Durchlauf zum Balken dazu
Schritt1 = UfBalken.Label1.Width / PubVar.SW1
'Erste nicht aktuelle Zeile bestimmen
AktuellZeileVon = FuAktuelleAnfangszeile(CStr(PubVar.NichtAktSeitenArray(Blatt)))
'Aktuelles Blatt als String speichern
AktuellesBlatt = PubVar.NichtAktSeitenArray(Blatt)
MeinTyp = Sheets(AktuellesBlatt).Cells(3, 1).Value
For AktuelleZeile = AktuellZeileVon To ZEILEBIS
'Code abarbeiten
Application.Run MeinTyp, AktuellesBlatt, AktuelleZeile
'Balken für die Zeile anpassen
Laenge1 = Laenge1 + Schritt1
UfBalken.Label2.Width = Laenge1
UfBalken.Label3.Caption = _
Format((AktuelleZeile - AktuellZeileVon + 1) & _
" von " & ZEILEBIS - AktuellZeileVon + 1) & " Zeilen."
DoEvents
Gesammtfortschritt = Gesammtfortschritt + 1
'Balken für den Gesammtfortschritt
Laenge3 = Laenge3 + Schritt3
UfBalken.Label8.Width = Laenge3
UfBalken.Label9.Caption = "Gesammtfortschritt: " & _
CInt(Gesammtfortschritt / Allgemein.FuAnzahlZeilenZumAktAusArray * 100) & " %"
Next AktuelleZeile
'Tabellenblatt auf Aktuell setzen
Zeile = PubVar.ZEILEVON
Do While Not Hilfsseite3.Cells(Zeile, 3) = "" And _
Not Hilfsseite3.Cells(Zeile, 3) = AktuellesBlatt
Zeile = Zeile + 1
Loop
Hilfsseite3.Cells(Zeile, 7).Interior.ColorIndex = 4
'Balken für die Blätter anpassen
Laenge2 = Laenge2 + Schritt2
UfBalken.Label5.Width = Laenge2
UfBalken.Label6.Caption = _
Blatt & " von " & UBound(PubVar.NichtAktSeitenArray) & " Blättern."
Next Blatt
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler "11" Division durch Null
25.11.2014 15:02:12
fcs
Hallo Patrick,
es ist immer Tricky Fehler herauszufinden, wenn ein Makro unter einem Betriebssystem läuft und unter dem anderen nicht.
Außerdem gehört der Divisions-Fehler meines Wissens nicht unbedingt zu den Problemfällen bei Mac/Windows-Makros.
Scheinbar funktioniert unter dem Mac irgendeine Wertaktualisierung nicht 100% so wie unter Windows.
Mit Lösung 2 wird eine Wertaktualisierung für die Ausgabe erzwungen.
Ich persönlich hätte den Fehler eher in Zeile
Schritt3 = UfBalken.Label7.Width / PubVar.SW3

erwartet, weil PubVar.SW3 den Wert 0 hat.
Tritt der Fehler auch auf, wenn du im Makro einen Haltepunkt setzt und dann mit F8 das Makro schrittweise ausführst? Außerdem hast du die Möglichkeit, hier im Lokalfenster oder Überwachungsfenster die Werte von Variablen zu verfolgen
Wenn die Lösung 2 funktioniert, dann würde ich sie mit einem Kommentar einbauen und die Sache hat sich erledigt. Denn diese Fehlersuche scheint in der Tat mühselig zu sein.
Gruß
Franz

Anzeige
AW: Laufzeitfehler "11" Division durch Null
25.11.2014 16:48:39
Patrick
Hallo Franz,
erst einmal vielen lieben Dank für die Antwort.
Also PubVar.SW3 hat nicht den Wert 0. Es wird in Zeile 8 ein Wert von einer Funktion übergeben. Das Makro selbst startet auch nur wenn es etwas gibt was nicht aktuell ist. Normal dürfte auch von der Funktion keine 0 kommen.
Wenn ich einen Haltepunkt setze und beim ersten Versuch entferne läuft der erste Durchlauf der Schleife ganz normal durch. Beim zweiten Durchlauf kommt der Fehler dann aber noch einmal. Lasse ich es dann weiter laufen, läuft es ohne Probleme bis ich z.b. Safari öffne und der Mac kurz etwas zu tun hat. Dann kommt der Fehler sofort.
Wenn ich in Einzelschritten durchgehe, bekomme ich den Fehler auch nicht.
Wenn ich im Debugger 2 oder 3 mal Start drücke läuft es auch ohne Probleme weiter.
Im Lokalfenster oder Überwachungsfenster die Werte von Variablen zu verfolgen habe ich nicht hinbekommen. Liegt wohl daran das es eine globale Variable ist, und ich sie deswegen nicht sehe. Oder gibt es dafür einen Trick oder eine Einstellung wie ich eine Public Variable überwachen kann?
Noch einmal vielen lieben Dank
Gruß Patrick

Anzeige
AW: Laufzeitfehler "11" Division durch Null
26.11.2014 06:19:25
fcs
Hallo Patrick,
die Verfolgung der Public Variablen funktioniert im Überwachungsfenster.
Dazu musst du in das Modul wechseln in dem die Variablen deklariert werden und dort die Variablen in die Überwachung übernehmen.
Die Tatsache, dass der Fehler beim Mac immer auftritt wenn eine andere Anwendung gestartet wird - aber nicht wenn DoEvents weggelassen wird- deutet darauf hin, dass es hier grundlegende Unterschiede bei der Verwaltung von Ereignissen in Windows/Mac gibt.
Die Hilfe zu DoEvents gibt auch Hinweise zu möglichen Problemen bei der Verwendung von DoEvents. Ob die dann hier auf dem Mac zutreffen, unter Windows aber nicht: keine Ahnung.
Gruß
Franz

Anzeige
AW: Laufzeitfehler "11" Division durch Null
26.11.2014 08:12:06
Patrick
Hallo Franz,
also das mit der Überwachung habe ich dank Deiner Hilfe hinbekommen.
Augenscheinlich stimmen die Werte auch, denn ich habe sogar glaubhafte Werte wenn wegen eines Fehlers angehalten wird.
Wie ich im ersten Post schon gesagt habe, würde ein weglassen des DoEvents dazu führen das der Code ohne Probleme läuft. Allerdings ist es nicht empfehlenswert weil ich dann den Balken nicht mehr sehe. Aber durchlaufen tut das ganze dann ohne Probleme.
Gibt es unter umständen eine andere Möglichkeit um die Uferform zu aktualisieren?
Gruß Patrick

240 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige