Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1828to1832
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 mal ja mal nein

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler mal ja mal nein
10.05.2021 05:14:32
Hajo_Zi
Hallo Andre,
frage jemand der neben Dir sitzt der hat villeicht gesehen wie Du den Fehler auslöst.
Ich habe es nicht gesehen, da ich nicht auf fremde Rechner schaue.
GrußformelHomepage
Fehler in I107
10.05.2021 09:50:30
Klaus
Hallo Andre,
der Text in Zelle I107 ist schlicht zu lang. Wenn du I107 auf die Hälfte oder so reduzierst, läuft das Makro durch.
Ich habe mir nicht die Mühe gemacht herauszufinden WIE lang der Text sein darf :-) Aber generell halte ich es für eine schlechte Idee, so lange Texte in einzelnen Zellen darzustellen.
LG,
Klaus M.
Anzeige
AW: Fehler in I107
10.05.2021 10:22:55
Daniel
Hi
habs grad mal durchgetestet:
in eine Listboxzelle passen maximal 2047 Zeichen.
dann kommt der Fehler.
Gruß Daniel
Genialer Hinzweis :) Danke
10.05.2021 10:32:42
AndreAndreAndre
Super :)
oh danke - das hilft mir total weiter:) super Lösung :) Ich habe es befürchtet :)
Lg Andre
Das ist der Key ja :)
10.05.2021 10:33:34
AndreAndreAndre
wunderbare Hilfe :) Danke
Danke: Super gelöst durch: Daniel Klaus M. jedoch.
10.05.2021 11:26:50
AndreAndreAndre
Danke: Super gelöst durch: Daniel Klaus M. jedoch..
=LÄNGE()
https://tipps.computerbild.de/software/officeprogramme/excel-zeichen-zaehlen-280627.html#:~:text=Geben%20Sie%20in%20eine%20freie,beispielsweise%20A1%2C%20B3%20oder%20C24.
die Länge somit in Spalte ausgegeben - dann nach Größe sortiert.
Dann die Datensätze die über 2047 Zeichen sind in Word gekürzt und Zeichenanzahl unter Wörter zählen ermittelt.
Gekürzten Text eingefügt.
Es geht super.
Es ist leider etwas langsam - kann ich in der Programmierung noch was tun - dass es schneller wird.
lg Andre
Anzeige
AW: Danke: Super gelöst durch: Daniel Klaus M. jedoch.
10.05.2021 11:35:58
Klaus
ungetestet:

ListBox1.List(ListBox1.ListCount - 1, 9) = CStr(vba.left(Tabelle1.Cells(lZeile, 9).Text,2047))
sollte nur die ersten 2047 Zeichen übertragen, egal wie lang der Text ist. SOllte der Text unter 2047 Zeichen sein, werden alle übertragen.
LG,
Klaus M.
Gute Idee jedoch ... gleich langsam sogar mit ...
10.05.2021 13:23:37
AndreAndreAndre
Gute Idee
Ich machte sogar 100 und eigentlich ganz gleich langsam.
ListBox1.List(ListBox1.ListCount - 1, 9) = CStr(VBA.Left(Tabelle1.Cells(lZeile, 9).Text, 100))
lg Andre
AW: Gute Idee jedoch ... gleich langsam sogar mit ...
10.05.2021 13:34:00
Klaus
Hallo Andre,
das Geschwindigkeitsproblem beim einlesen liegt an der Schleife, nicht an "left". Dazu habe ich weiter unten geantwortet. Wie du beide Probleme (Schleifenlos einlesen und gleichzeitig Left-2047 sicherstellen) unter einen Hut bekommst, ist jetzt deine Hausaufgabe :-)
LG,
Klaus M.
Anzeige
AW: Gute Idee jedoch ... gleich langsam sogar mit ...
10.05.2021 13:58:19
Daniel
Hi
Die Funktion CStr braucht man nicht, die Werte sind ja Text.
Cells().Text ist in Verarbeitung langsamer als Cells().Value.
Das .Text nimmt man dann, wenn man bei Zahlen oder Datumswerten das Zahlenformat der Zelle mit über nehmen will, oder wenn in den Zellen auch Fehlerwerte stehen können.
Stehen in den Zellen immer Texte, reicht .Value ind ist damit etwas schneller.
Gruß Daniel
AW: Gute Idee jedoch ... gleich langsam sogar mit ...
10.05.2021 17:48:40
AndreAndreAndre
also anstatt
zb:
ListBox1.List(ListBox1.ListCount - 1, 1) = CStr(Tabelle1.Cells(lZeile, 1).Text) schreibe ich nur wenn ich eine Zahlen oder Datumswerten das Zahlenformat habe
was schreibe ich wenn ich einen Text habe:
ListBox1.List(ListBox1.ListCount - 1, 1) = (Tabelle1.Cells(lZeile, 1).Value) ?
lg Gruß Andre
Anzeige
AW: Gute Idee jedoch ... gleich langsam sogar mit ...
10.05.2021 17:50:53
Daniel
Probiers doch aus.
Gruß Daniel
AW: Gute Idee jedoch ... gleich langsam sogar mit ...
10.05.2021 18:52:37
AndreAndreAndre
ja hat geklappt dauert statt 60 Sekunden nur 42 - war schon mal guter Tipp :) danke lg
Hajo_Zi ich habe dich .....
10.05.2021 10:35:31
AndreAndreAndre
bisher als sehr konstruktiv erlebt.
Jetzt ist es scheinbar anders
lg Andre
Schneller kann es werden ?
10.05.2021 12:32:39
AndreAndreAndre
Hallo :)
Wenn ich auf das "Auge" klicke kann ich den Datensatz editieren.
Oberhalb sind auch die Spalten
https://www.herber.de/bbs/user/146124.xlsm
Nr old Titel Main Key Sub key Detail key Land Datum
zum selektieren aufgelistet.
Im unteren Bereich sind die Felder des Datensatzes, wo ich sie auch editieren kann.
(Die Zeile in Suchen - soll später eine Schnellsuche ermöglichen) - ist noch nicht programmiert.
Geht es irgendwie einfacher im Makro im userform zu programmieren, damit es auch schneller wird.
Denn bei 9000 Datensätze wird es schon sehr langsam, wenn ich das "Auge" anklicke.
Was macht es so langsam - die Selektierung oben oder unterhalb die Felder zum editieren..
Das Feld Text hat die meisten Zeichen.
lg Andre
Anzeige
AW: Schneller kann es werden ?
10.05.2021 13:08:03
Klaus
Hi Andre,
nutze KEINE Schleife, um die Listbox zu füllen! Nutze stattdessen die RowSource Eigenschaft der Listbox, das geht auch bei 9000+ Datensätzen rasend schnell:

Me.ListBox1.RowSource = "main!" & Sheets("main").Range("A" & lCONST_STARTZEILENNUMMER_DER_TABELLE & ":I" & lZeileMaximum).Address
Du musst dann ein bisschen in den Eigenschaften der Listbox spielen. Column.Count einrichten, über "columnwidths" eventuell nicht benötigte Spalten auf breite null stellen. Und : "ColumnHeads = TRUE" nimmt dir gleich die korrekten Überschriften mit, das sieht viel ordentlicher aus als deine Labels!
LG,
Klaus M.
EDIT: Und gewöhn dir an, die Elemente zu bennen! Nicht "ListBox1, TextBox14" sondern "ListBox_Filme, TextBox_Titel" ... sonst steigst du bald durch deinen eigenen Code nicht mehr durch.
Anzeige
AW: Schneller kann es werden ?
10.05.2021 15:36:52
Daniel
HI
die von Klaus beschriebene Befüllmethode hat zusätzlich den Vorteil, dass du
- mehr als 11 Spalten in der Listbox verwenden kannst (bei .AddItem ist die Spaltenanzahl begrenzt)
- die Listbox automatisch die Überschriften anzeigen, wenn der entsprechende Schalter gesetzt ist
verwendet wird die Zeile oberhalb des Zellbereichs der Quelle.
du machst das .AddItem ja nur, um eventuelle Leerzeilen nicht in der Liste drin zu haben.
das Problem könntest du dardurch beheben, dass du die Liste vorher sortierst (Leerzellen werden bei aufsteigender Sortierung ans Ende sortiert) und die letzte befüllte Zeile der Sprungfunktion:
Cells(Rows.Count, 1).end(xlup).row ermittelst
alternativ dazu geht auch das direkte Schreiben der Werte in die Listbox:
Me.ListBox1.List = Sheets("main").Range("A" & lCONST_STARTZEILENNUMMER_DER_TABELLE & ":I" & lZeileMaximum).value
das ist auch sehr schnell und kann mehr Spalten als Additem.
das mit den Überschriften funktioniert hier nicht, auch wird das Zahlenformat nicht übernommen (könnte bei Datumswerten ein problem sein)
Aber auch hier müsstest du sortieren, um die Leerzeilen auszuschließen.
Gruß Daniel
Anzeige
AW: Schneller kann es werden ?
10.05.2021 16:08:19
AndreAndreAndre
^
ganz super ich werde es am Abend gleich umsetzen :) sehr tolle Tipps von Euch danke :))))))
ganz lieben Gruß Andre
AW: Schneller kann es werden ?
10.05.2021 16:30:43
Daniel
wenn du bei der Einlese-Schleife bleiben willst, dann solltest du deine selbstgeschriebene Funktion zum Ermitteln, ob eine Zeile leer ist oder nicht, durch die die Excelfunktion Anzahl2 oder ZählenWenn ersetzen.
Diese Funktionen kann man auch in VBA über Worksheetfunction.CountA und Worksheetfunction.CountIF einsetzen.
Zellbezüge müssen allerdings im VBA-Style (Range(...) angegeben werden.
Gruß Daniel
deine selbstgeschriebene Funktion ?
10.05.2021 16:44:18
Helmut
Bei seinen Fragen glaube ich das nicht ;-)
Anzeige
stimmt Helmut
10.05.2021 19:36:17
AndreAndreAndre
ich habe sie nicht im Ursprung geschrieben lg Andre
ja genial :) jedoch wie :)
10.05.2021 18:56:07
AndreAndreAndre
nur value . versus txt variablen hat mal echt was gebracht ...
aber da ich die Formel nur adaptierte - bin ich mir nicht sicher was ich da beiden guten beiden Tipps konkret mache :)
Me suena un poco español:)
lg Andre
AW: Schneller kann es werden ?
10.05.2021 17:44:58
AndreAndreAndre
Danke :)
Bei den Texboxen habei ich eine eigene Aufstellung - bin mir nicht sicher was passiert - wenn ich jetzt alle ändern - das mache ich wenn erst später :) zuerst mal die anderen DInge die ihr beschrieben habt .
wo oder anstatt welchem Teil füge ich den ein?
Me.ListBox1.RowSource = "main!" & Sheets("main").Range("A" & lCONST_STARTZEILENNUMMER_DER_TABELLE & ":I" & lZeileMaximum).Address
beite stelle ich ja hier ein:
'Spaltenbreiten der Liste anpassen (0=ausblenden, nichts=automatisch)
'";;;"
ListBox1.ColumnWidths = "0;30;30;290;60;120;120;120"
'Feste Breiten: ListBox1.ColumnWidths = "0;100;100;100"
lg Andre
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige