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

unheimlicher Fehler in Excel 2007?

unheimlicher Fehler in Excel 2007?
28.07.2008 11:18:24
Werner
VBA-Level: befriedigend
Hallo zusammen!
Kürzlich hat mir Excel eine geradezu unheimliche Fehlermeldung beschert, die sich auch immer wieder
einstellt. Nach der Meldung stürzt Excel ab, nachdem es gefragt hat, ob es den Fehler an Microsoft
weitermelden soll. Es handelt sich einen Makro der folgenden Art:
Sechzig Daten-Textfelder in einer Userform sind durch einen Makro mit Daten aus einer Tabelle gefüllt worden. Sie sind als "Textfeld1"..."Textfeld60" benannt.
Nun habe ich einen weiteren, davon unabhängigen Makro entwickelt, um den Inhalt einiger der Textfelder manuell zu löschen. Links neben jedem Daten-Textfeld befindet sich in der Userform ein weiteres Textfeld mit Namen "Loeschfeld1", "Loeschfeld2".... Wenn dort ein "x" oder ein "X" eingegeben wurde, sollen das Textfeld rechts daneben und auch das "x" geloescht werden. Es handelt sich um folgenden Makro:

Public Sub LoeschEinige()
Zaehler = 1
Do While Userform1.Controls("Textfeld" & CStr(Zaehler)).Text  ""
If UCase(Userform1.Controls("Loeschfeld" & CStr(Zaehler)).Text) = "X" Then
Userform1.Controls("Textfeld" & CStr(Zaehler)).Text = ""
Userform1.Controls("LoeschFeld" & CStr(Zaehler)).Text = ""
End If
If Zaehler 


Der Fehler ist einfach nicht wegzubekommen. Der Art des Fehlers ist aus der Excel-Fehlermeldung nicht zu entnehmen. Hat jemand von euch mit Excel 2008 schon einmal Ähnliches erlebt?
Werner R.

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Zusatz
28.07.2008 11:44:00
Werner
Korrektur: "mit Excel 2007"
Zusatz: Der Fehler tritt offenbar besonders dann auf, wenn alle 60 Daten-Textfelder gefüllt sind. Sind nur
einige Daten-Textfelder gefüllt, funktioniert der Makro. Werner R.

AW: Zusatz
28.07.2008 12:08:32
Luschi
Hallo Werner,
bei der Do While - Schleife sollte man in der Bedingung nicht das Objekt wechseln. Benutze doch die
For - Schleife:

Public Sub LoeschEinige()
Dim Zahler As Integer
For Zaehler = 1 To 60
If UCase(Userform1.Controls("Loeschfeld" & CStr(Zaehler)).Value) = "X" Then
Userform1.Controls("Textfeld" & CStr(Zaehler)).Value = ""
Userform1.Controls("LoeschFeld" & CStr(Zaehler)).Value = ""
End If
Next Zaehler
End Sub

Gruß von Luschi
aus klein-Paris

Anzeige
AW: unheimlicher Fehler in Excel 2007?
28.07.2008 12:31:40
Tino
Hallo,
warum solch eine komplizierte Do While Schleife
Eine einfache For – Next Schleife sollte den Zweck auch erfüllen.

Private Sub UserForm_Click()
Dim A As Byte
For A = 1 To 60
If UCase(UserForm1("Loeschfeld" & CStr(A))) = "X" Then
UserForm1("Textfeld" & CStr(A)) = ""
UserForm1("LoeschFeld" & CStr(A)) = ""
End If
Next A
End Sub


Gruß Tino

www.VBA-Excel.de


For...Next-Schleife weniger geeignet
28.07.2008 13:04:52
Werner
Hallo Luschi, Hallo Tino,
Vielen Dank für eure Vorschläge, aber eine For...Next-Schleife als solche scheint mir hier weniger
geeignet, weil ich jedes Mal mit einem dem hier zur Debatte stehenden Makro vorangehenden Makro (der funktioniert und den ich deshalb nicht näher erläutert habe) unterschiedlich viele Datensaetze in die Daten-Textfelder einlesen, z.B. einmal nur 45, dann wieder 37, usw. Die Do While-Schleife soll ja gerade abfragen, ob das jeweils naechste Daten-Textfeld leer oder gefuellt ist.
Eine For-Next-Schleife könnte ich hier nur einsetzen, wenn die Gesamtzahl der jeweils gefüllten
Datensätze bekannt wäre. Sie ist aber jedesmal verschieden, kann sogar null sein (wenn bei einer
in den vorangehenden Makro eingebauten Suchabfrage keine Datensätze, die dem Suchkriterium entsprechen, gefunden werden. Werner R.

Anzeige
AW: For...Next-Schleife weniger geeignet
28.07.2008 13:11:00
Rudi
Hallo,

Die Do While-Schleife soll ja gerade abfragen, 


was hindert dich, das auch in der For...Next zu machen?
Gruß
Rudi

Ist dieser Alternative-Code besser?
28.07.2008 13:33:51
Werner
Hallo Rudi,
wieder im Lande? Danke für deine Anregung!
Nach den Lehrbüchern verwendet man, soweit mir bekannt For...Next-Schleifen, wenn die Anzahl der Schleifendurchgänge bekannt ist. In diesem Fall ist die Anzahl der Schleifendurchgänge aber nicht bekannt, denn mein
hier erörterter Makro weiss nicht im voraus, wieviele Daten-Textfelder der Userform mit Daten belegt
sind. Er muss also jedesmal prüfen, ob das nächste Textfeld auch Daten enthält oder leer ist.
Natürlich kann ich in eine For...Next-Schleife eine If-Abfrage einbauen, z.B. so:

Public Sub Loesch()
For Zaehler = 1 To 60
If Userform1.Controls("Textfeld"  & CStr(Zaehler)).Text  "" Then
If UCase(Userform1.Controls("Loeschfeld"  & CStr(Zaehler)).Text) = "X" Then
Userform1.Controls("Loeschfeld"  & CStr(Zaehler)).Text = ""
Userform1.Controls("Textfeld" & CStr(Zaehler)).Text = ""
End If
Else
Exit For
End If
Next Zaehler
End Sub


Dann habe ich zwar nicht, worauf Luschi hingewiesen hat, in der Bedingung einer Do While-Schleife
die Bedingung gewechselt, sondern stattdessen in der If-Abfrage die Bedingung gewechselt. Um einen Wechsel der Bedingung komme ich ja kaum umhin, weil alle Daten-Textfelder ausser ihrem ganz hinten stehenden Index ja gleich benannt sind und ich bei jedem Durchgang mit Hilfe der Variable Zaehler das jeweils naechste Daten-Textfeld ansprechen möchte.
Ist mein oben vorgeschlagener Alternativ-Code besser als der ursprüngliche? Werner R.

Anzeige
AW: Ist dieser Alternative-Code besser?
28.07.2008 13:53:54
Rudi
Hallo,
1. warum wandelst du Zaehler in einen String um? Das ist überflüssig.
2. brauchst du die Scheleife aus meiner Sicht nicht zu verlassen. Ob du die Textfelder alle durchgehst oder nur ein paar: du wirst den Unterschied nicht merken, es sei denn, es sind 1000de.
Gruß
Rudi

Habe verstanden
28.07.2008 14:06:20
Werner
Hallo Rudi,
gebe dir recht. 15 Schleifendurchgänge oder 60, da ist kaum ein Unterschied. Dank!
Ich gehe jetzt davon aus, dass der in meinem letzten Thread-Beitrag erwähnte Bedingungswechsel
in der If-Schleife ok ist (bitte nur antworten, wenn dem wider Erwarten nicht so sein sollte).
Werner R.

Anzeige
AW: Habe verstanden
28.07.2008 14:21:01
Tino
Hallo,
ich hätte es so gemacht.

Dim A As Byte
For A = 1 To 60
If UCase(UserForm1("Loeschfeld" & CStr(A))) = "X" Then
If UserForm1("Textfeld" & CStr(A)) = "" Then Exit For
UserForm1("Textfeld" & CStr(A)) = ""
UserForm1("LoeschFeld" & CStr(A)) = ""
End If
Next A


Gruß Tino

www.VBA-Excel.de


Ist eine weitere Alternative
28.07.2008 14:29:00
Werner
Hallo Tino,
Das ist eine echte Alternative, vielleicht sogar die kürzeste Lösung. Vielen Dank!
Um das Wechseln des Objekts in der Bedingung, hier bei der If-Abfrage, kommen wir allerdings auch
hier nicht umhin (laut Luschi war dies bei der Do While-Schleife der wahrscheinliche Grund für meinen
Programmabsturz).
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige