Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1900to1904
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 Userform

Laufzeitfehler Userform
18.10.2022 18:47:48
Henry
Hallo liebes Forum,
ich bekomme einen Laufzeitfehler (Keine Zelle gefunden), bei folgendem Code in Userform_Initialize:
With cmb_year
For Each Zelle In Sheets("datenbank").Columns(6).SpecialCells(xlCellTypeConstants, 1)
For i = 0 To .ListCount - 1
If Zelle.Text Next
If i = .ListCount Then
.AddItem Zelle.Text
ElseIf Zelle.Text .List(i) Then
.AddItem Zelle.Text, i
End If
Next
End With
Ich möchte mit diesem Code gerne die aktuellen Einträge (nicht doppelt) der Spalte F in eine ComboBox laden.
Wo ist der Fehler? :-(

32
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler Userform
18.10.2022 18:53:31
Daniel
Hi
dann stehen im Sheet Datenbank in der Spalte F keine konstanten Zahlen.
entweder sind ist die Spalte leer, oder die Werte sind Text oder die Zahlen werden per Formel erzeugt.
Gruß Daniel
AW: Laufzeitfehler Userform
18.10.2022 18:54:21
Henry
Es handelt sich um Text.
Und nun?
AW: Laufzeitfehler Userform
18.10.2022 19:01:18
Daniel
dann musst du im SpecialCells angeben, dass du Texte einlesen willst und nicht Zahlen.
das SpecialCells entspricht dem Menüpunkt "Start - Bearbeiten - Suchen und Auswählen - Inhalte - Konstanten/Formeln"
wenn du das in den verschiedenen Varianten ausprobierst und mit dem Recorder aufzeichnest, dann kannst du dir die Frage selber beantworten.
Gruß Daniel
Anzeige
AW: Laufzeitfehler Userform
18.10.2022 19:12:56
Henry
Prima!
Das hat schon mal geklappt.
Ein weiterer Fehler tritt allerdings nun auf wenn ich bei der ComboBox einen Eintrag auswähle.
Ich habe in Spalte 13 in der Datenbank eine Formel.
Die Formel lautet: =WENN(E2=sortierenalias;1;"x")
Die Formel habe ich runtergezogen.
Über den Namensmanager habe ich einen Namen "sortierenalias" definiert und bei bezieht sich auf folgendes angegeben: ="="
Folgender Code soll die Liste in der Userform Spalte 5 filtern:
Es kommt aber ein Fehler bei folgender Zeile:
.Sort Key1:=.Cells(1, 13), Order1:=ilAscending, Header:=ilNo
Die Sort Methode des Range Objekts konnte nicht ausgeführt werden.

Private Sub cmb_filteralias_Change()
Dim i As Long
ThisWorkbook.Names("sortierenalias").RefersTo = "=" & cmb_filteralias.Value
With Sheets("datenbank").Range("A1").CurrentRegion
With .Offset(1, 0).Resize(.Rows.Count - 1)
.Sort Key1:=.Cells(1, 13), Order1:=ilAscending, Header:=ilNo
i = WorksheetFunction.Sum(.Columns(13))
If i = 0 Then i = .Rows.Count
lbo_datenbank.RowSource = "datenbank!" & .Resize(i, 5).Address
End With
End With
End Sub

Anzeige
AW: Laufzeitfehler Userform
18.10.2022 19:18:53
Daniel
Excelkonstanten beginnen immer mit "xl" und nicht mit "il"
ich empfehle die Verwendung von Option Explicit.
Gruß Daniel
AW: Laufzeitfehler Userform
18.10.2022 19:24:39
Henry
Hallo Daniel,
das war der Fehler.
Nun ist der Fehler allerdings eine Zeile weiter nach unten gesprungen:
Die Sum Eigenschaft des Worksheet Function Objektes kann nicht zu geordnet werden.
Es hängt an folgender Zeile:
X = WorksheetFunction.Sum(.Columns(13))
AW: Laufzeitfehler Userform
19.10.2022 07:39:13
GerdL
Moin Henry,
ungetestet.

Private Sub cmb_filteralias_Change()
Dim i As Long
ThisWorkbook.Names("sortierenalias").RefersTo = "=" & cmb_filteralias.Value
With Sheets("datenbank").Range("A1").CurrentRegion
With .Offset(1, 0).Resize(.Rows.Count - 1)
.Sort Key1:=.Cells(1, 13), Order1:=xlAscending, Header:=xlNo
End With
i = WorksheetFunction.Sum(.Parent.Columns(13))
If i = 0 Then i = .Rows.Count
lbo_datenbank.RowSource = "datenbank!" & .Resize(i, 5).Address
End With
End Sub
Gruß Gerd
Anzeige
AW: Laufzeitfehler Userform
19.10.2022 17:25:15
Henry
Hallo Gerd,
leider kommt wieder die Fehlermeldung:
Die Sum Eigenschaft des Worksheet Function Objektes kann nicht zugeordnet werden.
Es hängt bei dieser Zeile:
i = WorksheetFunction.Sum(.Parent.Columns(13))
Gruß
Henry
AW: Laufzeitfehler Userform
19.10.2022 17:35:03
Daniel
Hi
der Code

X = WorksheetFunction.Sum(.Columns(13))
sieht zumindest mal korrekt aus.
vermutlich steht in der Spalte 13 irgendwo eine Fehlermeldung, die das Problem erzeugt.
wenn meine Vermutung stimmt und es an so einer Fehlermeldung liegt, gibts zwei möglichkeiten:
a) die Fehlermeldung in der Spalte ist von dir nicht beabsichtigt
dann müsstest du die Formel in Spalte 13 überarbeiten und so umgestalten , dass kein Fehler auftritt
b) die Fehlermeldung in Spalte 13 ist korrekt und die Summe soll trotz Fehlermeldung über die restlichen Zeilen gebildet werden
dann müsstest du die Summe mit Worksheetfunction.Aggregate(9, 6, .Columns(13)) bilden.
Gruß Daniel
Anzeige
AW: Laufzeitfehler Userform
19.10.2022 17:43:59
Henry
Hallo Daniel,
das was auffällig ist, ist, dass sobald ich die Fehlermeldung bekomme, meine Formel nicht mehr greift.
Es kommt dann anstelle der 1 oder dem x in der Formelspalte: #Name?
Komisch.
Ich hatte diesen Code damals von dir bekommen.
Und er hat in meiner anderen Userform mit Header einwandfrei geklappt.
Ich konnte in meiner alten Userform das Jahr filtern und die gewünschten Ergebnisse wurde angezeigt.
AW: Laufzeitfehler Userform
19.10.2022 17:45:13
Henry
Oder hat es etwas damit zu tun, dass ich versuche Text zu filtern und keine Zahl?
AW: Laufzeitfehler Userform
19.10.2022 18:18:37
Henry
Mir ist bei dem Code der im Userform Initialize Ereignis steht auch noch etwas aufgefallen.
Ich lade bei Initialize immer die Überschrift der Spalte mit in die ComboBox.
Das war damals nicht so.
Mein Code um die ComboBox zu füllen sieht wie folgt aus:
With cmb_filteralias
For Each Zelle In Sheets("datenbank").Columns(5).SpecialCells(xlCellTypeConstants, 23)
For i = 0 To .ListCount - 1
If Zelle.Text "kleiner gleich" .List(i) Then Exit For
Next
If i = .ListCount Then
.AddItem Zelle.Text
ElseIf Zelle.Text .List(i) Then
.AddItem Zelle.Text, i
End If
Next
End With
Anzeige
AW: Laufzeitfehler Userform
19.10.2022 18:41:59
Henry
Ich glaube ich weiß woran es liegt.
Wenn ich in folgender Zeile in meiner alten userform wo alles geklappt hat folgendes Eingebe:
For Each Zelle In Sheets("overview").Columns(6).SpecialCells(xlCellTypeConstants, 2)
...erscheint lediglich die Überschrift in der ComboBox.
Wenn ich anstelle der 2 eine 1 schreibe, klappt wieder alles.
Komisch ist, dass in der alten Tabelle das Jahr auch eine Konstante war.
Also eigentlich "23". Trotzdem hat es mit der 1 geklappt.
In meiner neuen Userform bin ich gezwungen eine 2 anzugeben.
Andernfalls kommt die Fehlermeldung:
"Keine Zellen gefunden".
Anzeige
AW: Laufzeitfehler Userform
19.10.2022 19:09:35
Henry
Hallo,
das ist eine gute Info für mich.
Hilft mir bei meinem Problem aber leider nicht weiter.
AW: Laufzeitfehler Userform
19.10.2022 19:11:47
GerdL
Es ist hilfreicht, wenn du eine Beispieldatei mit dem eingesetzten Code u. ein paar signifikanten Dummydaten hier hochlädtst,
Gruß Gerd
AW: Laufzeitfehler Userform
19.10.2022 19:28:00
Henry
Hallo Gerd,
anbei eine Beispieldatei, die ich nachgebaut habe.
https://www.herber.de/bbs/user/155753.xlsm
Hier tritt der gleiche Fehler auf mit der Sum Function.
Außerdem wird die ComboBox1 nicht korrekt gefüllt wenn ich bei specialcells constants eine 2 eingebe.
Anzeige
AW: Laufzeitfehler Userform
19.10.2022 21:05:16
GerdL
Moin
Stelle im VBA-Editor bei -Extras-Optionen-Allgemein
Unterbrechen bei Fehlern auf "In Klassemodul"
Eine Tabelle "datenbank" war nicht in der Beispieldatei. Ich habe deshalb die Codezeile beim Combobox1_Change abgeändert.

Option Explicit
Private Sub ComboBox1_Change()
Dim X As Long, bln As Boolean
ThisWorkbook.Names("sortierenalias").RefersTo = ComboBox1.Value
With Sheets("Tabelle1").Range("A1").CurrentRegion
With .Offset(1, 0).Resize(.Rows.Count - 1)
.Sort Key1:=.Cells(1, 13), Order1:=xlAscending, Header:=xlNo
X = WorksheetFunction.Sum(.Columns(13))
If X = 0 Then X = .Rows.Count
ListBox1.RowSource = Sheets("Tabelle1").Cells(2, 1).Resize(X, 5).Address(external:=True)
End With
End With
End Sub
Private Sub UserForm_Initialize()
Dim LetzteZeile As Long, Zelle As Range, i As Long
With Me.ListBox1
.ColumnCount = 12
.ColumnWidths = "60;30;40;30;35;75;90;60;60;60;45;60"
.ColumnHeads = True
.Font.Size = 10
End With
With Worksheets("Tabelle1")
LetzteZeile = .Range("A" & .Rows.Count).End(xlUp).Row
Me.ListBox1.RowSource = .Name & "!A2:L" & LetzteZeile
End With
With ComboBox1
For Each Zelle In Sheets("Tabelle1").Columns(5).Cells(1).Resize( _
WorksheetFunction.CountA(Sheets("Tabelle1").Columns(5), 1))
For i = 0 To .ListCount - 1
If Zelle.Text  .List(i) Then
.AddItem Zelle.Text, i
End If
Next
End With
End Sub
Gruß Gerd
Anzeige
AW: Laufzeitfehler Userform
20.10.2022 07:24:05
Henry
Hallo Gerd,
es klappt.
Es kommt kein Fehler mehr. :-)
Allerdings würde ich gerne noch 2 Dinge anpassen.
1.
Wenn ich die ComboBox1 fülle, wird eine Leerzeile und die Überschrift in die ComboBox1 geladen.
Ich möchte aber nur die Werte ab Zeile 2 in der ComboBox1 stehen haben.
2.
Wenn ich filtere werden nur die ersten 5 Spalten in der ListBox1 ausgwiesen.
Ich würde aber gerne die Spalten 1 bis 12 ausweisen.
Sprich bei der Filterung fehlen mir die Spalten 6 bis 12.
Ich würde mich riesig freuen, wenn du mir hier noch einmal helfen würdest.
Viele Grüße
Henry
Anzeige
AW: Laufzeitfehler Userform
20.10.2022 12:45:40
GerdL
Moin,
ungetestet.
2.) In Combobox1_Change
ListBox1.RowSource = Sheets("Tabelle1").Cells(2, 1).Resize(X, 12).Address(external:=True)
1.) Im Userform_Initialize

With ComboBox1
.Style = 2
For Each Zelle In Sheets("Tabelle1").Columns(5).Cells(1).Resize( _
WorksheetFunction.CountA(Sheets("Tabelle1").Columns(5), 1))
If Zelle.Row > 1 Then
For i = 0 To .ListCount - 1
If Zelle.Text  .List(i) Then
.AddItem Zelle.Text, i
End If
End If
Next
End With
Gruß Gerd
AW: Laufzeitfehler Userform
20.10.2022 12:52:41
Henry
Hallo Gerd,
dein Code funktioniert fast perfekt.
Das einzige, was noch ist, ist, dass ganz oben in der ComboBox eine Leerzeile steht.
Bekommt man die noch irgendwie raus?
AW: Laufzeitfehler Userform
20.10.2022 13:42:26
GerdL
Hallo Henry,
schreibe noch rein
ComboBox1.Listindex= 0
Gruß Gerd
AW: Laufzeitfehler Userform
20.10.2022 13:51:50
Henry
Hallo Gerd,
leider bleibt der erste Eintrag weiterhin leer.
Hast du vielleicht noch eine andere Idee?
Oder habe ich das an der falschen Stelle im Code stehen?
Gruß
Henry
Dim Zelle As Range, i As Long
With cmb_filternachname
.Style = 2
For Each Zelle In Sheets("datenbank").Columns(7).Cells(1).Resize( _
WorksheetFunction.CountA(Sheets("datenbank").Columns(7), 1))
If Zelle.Row > 1 Then
For i = 0 To .ListCount - 1
If Zelle.Text Next
If i = .ListCount Then
.AddItem Zelle.Text
ElseIf Zelle.Text .List(i) Then
.AddItem Zelle.Text, i
End If
End If
Next
End With
cmb_filternachname.ListIndex = 0
AW: Laufzeitfehler Userform
20.10.2022 14:14:10
GerdL
Nein, muss passen.
Gruß Gerd
AW: Laufzeitfehler Userform
20.10.2022 17:44:52
Henry
Hallo Gerd,
ich habe die überarbeitete Datei nochmal beigefügt:
https://www.herber.de/bbs/user/155774.xlsm
Wenn ich ComboBox1.ListIndex = 0 schreibe, bekomme ich wieder einen Fehler bei der Sum Worksheet Function.
Außerdem geht dann die Formel in Spalte 13 der Tabelle "kaputt".
Was mache ich falsch?
AW: Laufzeitfehler Userform
20.10.2022 18:10:08
Daniel
Hi
du befüllst die Namen falsch.
Wenn in einem Namen ein fester Wert hinterlegt sein soll, dann brauch dein Name die Formel: ="Dein Text"
du versuchst aber, nur den Text alleine reinzuschreiben und das geht nicht.
Falsch: ThisWorkbook.Names("sortierenalias").RefersTo = ComboBox1.Value
Richtig: ThisWorkbook.Names("sortierenalias").RefersToR1C1 = "=""" & ComboBox1.Value & """"
Gruß Daniel
AW: Laufzeitfehler Userform
20.10.2022 18:37:30
Henry
Hallo Daniel,
ich habe deine Änderungen übernommen.
Der Fehler taucht nun nicht mehr auf.
Allerdings wird mir in der ComboBox1 in der ersten Zeile immer noch eine Leerzeile angezeigt.
VG
Henry
AW: Laufzeitfehler Userform
20.10.2022 20:30:47
Daniel
Dann läuft deine Schleife zur Befüllung noch über eine Leberzelle oder eine Pseudo-Leerzelle (Text "")
Aber du kannst ja mit einer einfachen If -Abfrage prüfen, ob in der Zelle was steht:

for each Zelle in ...
If Zelle.Value  "" then
Combobox1.AddItem Zelle.Value
End if
Next
Gruß Daniel
AW: Laufzeitfehler Userform
21.10.2022 08:23:10
Henry
Hallo Daniel,
irgendwie funktioniert das leider nicht.
Ich weiß nicht genau wo ich diesen Codeabschnitt einfügen soll.
Wenn ich das einfüge habe ich auf einmal Duplikate, die Überschrift und weiterhin die Leerzelle in der ComboBox.
Kannst du dir vielleicht nochmal meine Datei anschauen:
https://www.herber.de/bbs/user/155778.xlsm
VG
Henry
AW: Laufzeitfehler Userform
21.10.2022 13:21:30
Daniel
naja, wie hast du es denn versucht und wie äußert sich das "funktioniert nicht" konkret?
prinizpiell sollte das Ausschließen einer leeren Zellen nicht anders ablaufen oder komplizierter sein, als das Ausschlließen einer Zelle mit einer bestimmten Zeilennummer und das hast du ja auch hinbekommen (zumindest ist es in deinem Code drin, daher gehe ich davon aus, dass du das programmiert hast.
ansonsten ist deine Zusammstellung des Zellbereichs irgendwie falsch, da kommen 10 Zellen raus und nicht 9, daher ist die Leerzelle dabei.
probiere mal

For Each Zelle In Sheets("Tabelle1").Cells(1, 1).CurrentRegion.Columns(5).Cells
das funktioniert bei mir besser.
Gruß Daniel
AW: Laufzeitfehler Userform
21.10.2022 13:24:30
Henry
Danke Daniel,
jetzt klappt es :-)
AW: Laufzeitfehler Userform
19.10.2022 11:58:34
snb
Reicht schon:

Private Sub Userform_Initialize()
cmb_year.list=Sheets("datenbank").Columns(6).SpecialCells(2).value
Edn Sub

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige