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

max. Speichervolumen einer Objektvariablen

max. Speichervolumen einer Objektvariablen
09.10.2019 18:38:02
reiner
Hallo Leute,
Mithilfe eines Makros werden Telefonnummern in einer Objektvariablen gespeichert, aber mir fiel auf dass ab einer bestimmten Anzahl Telefonnummern die weiteren nicht mehr gespeichert werden.
Ich hatte die Variable zunächst als "String" definiert, aber selbst wenn ich die Variable nicht definiere scheint es eine Obergrenze zu geben.
Nach Reduzierung der Anzahl einzulesender Telefonnummern wurden alle Nummern bis zum Ende eingelesen.
Kann mir jemand sagen wieviel Zeichen maximal in einer Objektvariablen gespeichert werden können? Gibt es eine Höchstgrenze? Wieviel Zeichen können in einer Zelle gespeichert werden?
mfG
reiner

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: max. Speichervolumen einer Objektvariablen
09.10.2019 18:53:21
ChrisL
Hi Reiner
Limits gibt es viele:
https://www.herber.de/mailing/vb/html/vagrpdatatype.htm
https://support.office.com/en-us/article/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3
String und Objekt passt irgendwie nicht zusammen. Zeig mal Code-Schnipsel.
aber selbst wenn ich die Variable nicht definiere
Ergibt in der Regel ein Datentyp 'Variant'
cu
Chris
Anzeige
AW: max. Speichervolumen einer Objektvariablen
09.10.2019 20:26:41
Daniel
HI
was meinst du genauer mit "Objektvariablen"?
Objekte sind sowas wie Zellen, Tabellenblätter, Dateien, Grafikelemente.
Es gibt viele verschiedene Objekte und jedes hat seine eigene Variable.
Telefonnummern sind einfache Werte, für die braucht man keine Objektvariablen.
du müsstest also schon genauer beschreiben, was du gemacht hast.
in eine Zelle passen meines Wissens nach c.a, 32.000 Zeichen (2^15)
Gruß Daniel
Speicherkapazität String-Variable....
10.10.2019 08:38:32
EtoPHG
Hallo Daniel,
In eine Variable des Datentyps String, das Doppelte also 2^16
Gruess Hansueli
AW: Speicherkapazität String-Variable....
10.10.2019 09:31:04
Daniel
HI
wie kommst du auf den Wert?
ggf Versions- oder Speicherplatzabhängig?
mein Excel 2016 verkraftet auch noch ein
dim T as string
T = String(2^29, "x")

das wären über 500 Mio Zeichen.
bei 2^30 gibt's dann einen Fehler.
Gruß Daniel
Anzeige
so bin ich drauf gekommen...
10.10.2019 11:40:19
EtoPHG
Daniel,
Meine Quelle: Zusammenfassung der Datentypen
und von dort:
Userbild
Deine 500 Mio sind auch irgendwie suspekt ;-)
Gruess Hansueli
AW: so bin ich drauf gekommen...
10.10.2019 13:52:15
Daniel
wie gesagt, ich hab einfach den String solange gefüllt, bis der Fehler gekommen ist, und der kam bei 2^30
hier noch einmal dasw problem mit Beispieldatei
10.10.2019 14:54:21
reiner
Hallo Leute,
erst einmal vielen Dank für die Rückmeldungen die mir allerdings nicht weiter geholfen haben, vielleicht habe ich das Problem auch nicht eindeutig geschildert.
Aus diesem Grund habe ich die Tabelle und das Makro auf das Wesentliche abgespeckt.
https://www.herber.de/bbs/user/132466.xlsb
Die hier verfremdeten Telefonnummern werden -im Original- aus einer Telefonanlage mit Datum und Uhrzeit ausgelesen.
Nach dem Öffnen wird durch Betätigung der Schaltfläche "Formular Öffnen" ein Makro ausgeführt. Dabei werden die Datensätze im (im Original variabel) Bereich "H 4 bis L 104" in eine Combo-Box (auf der UF) eingelesen und gleichzeitig in der Zelle "R10" im rot umrandeten Bereich der Tabelle aufgelistet und gespeichert.
Bei voller Funktionsfähigkeit des Makros können nun durch Klicken auf einen Eintrag der cbo weitere Aktionen ausgelöst werden; ist hier aber nicht erforderlich.
Mir fiel auf dass lediglich die Datensätze bis zur Zeile 95 aufgelistet werden, die Datensätze von Zeile 96 bis 104 werden ignoriert, daraus resultiert auch meine gestrige Anfrage.
Woran mag es also liegen dass lediglich die Datensätze 4 bis 95 geleistet sind? Ist das max. Speichervolumen der Zelle "R10" (ersatzweise einer Variablen) erreicht?
Wie kann ich erreichen dass SÄMTLICHE (Maximal 500) Datensätze aufgelistet werden?
mfG
reiner
Anzeige
AW: hier noch einmal dasw problem mit Beispieldatei
11.10.2019 11:08:25
ChrisL
Hi Reiner
Soweit ich es nachvollziehen kann, werden Duplikate nicht berücksichtigt, weshalb die Anzahl in der Listbox nicht mit der Anzahl in der Tabelle übereinstimmen wird.
Bei der Prüfung bezüglich Duplikat gibt es m.E. eine Unstimmigkeit:
If InStr(Range("R10").Value, strNummern) = 0 Then
Die Methode "In-String" berücksichtigt auch Teil-Strings. Beispielsweise Wert 550 (Zeile 104) ist auch im String 5504444 (Zeile 66) enthalten und wird darum nicht erneut berücksichtigt.
Quick&Dirty könnte man das Problem evtl. wie folgt lösen:
If InStr(Range("R10").Value, "|" & strNummern & "|") = 0 Then
Ansonsten müsste man vermutlich mal den Code ganz umschreiben. Benutzt du R10 nur für dich als Hilfszelle oder braucht es den String-Haufen aus anderen Gründen?
cu
Chris
Anzeige
AW: hier noch einmal dasw problem mit Beispieldatei
11.10.2019 17:02:04
reiner
hallo Chris,
das sieht schon sehr gut aus mit deinem Lösungsvorschlag!!
Die Zelle "R10" benötige ich überhaupt nicht, in der Originalversion nutze ich stattdessen eine Variable, ich habe die Zelle hier nur eingesetzt damit man sieht welche Einträge eingelesen werden.
Du hast Recht, in meiner Version werden keine Duplikate eingelesen, im Gegensatz zu deinem Vorschlag. Da werden alle Datensätze bis zur letzten beschriebenen Zeile eingelesen.
Eine abschließende Frage: hast du noch einen Tipp wie der vorhandene Programmcode erweitert werden kann um Duplikate auszuschließen?
Auf jeden Fall hat mir dein Vorschlag schon jetzt weiter geholfen, danke
mfg
reiner
Anzeige
mehrspaltige Listbox ohne Duplikate
11.10.2019 18:32:43
ChrisL
Hi
Ich kann erst am Montag wieder testen.
For Anzahl = 1 To Nummern
strNummern = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(rng.Cells(Anzahl,  _
1).Resize(, 5))), "|")
If InStr(Range("R10").Value, strNummern) = 0 Then
cboNummern.AddItem rng.Cells(Anzahl, 1)
For j = 2 To 6
cboNummern.List(cboNummern.ListCount - 1, j - 1) = rng.Cells(Anzahl, j)
Next j
Range("R10").Value = Range("R10").Value & strNummern
End If
Next Anzahl

Mein letzter Vorschlag war Quatsch. Vielleicht müsste die Anpassung hier erfolgen:
Range("R10").Value = Range("R10").Value & "|" & strNummern
Alternativen sind mit ZÄHLENWENNS (WorksheetFunction.CountIfs) zu prüfen, ob die Nummer im Bereich oberhalb schon einmal erschienen ist.
Die performantere Lösung wäre die Liste zu sortieren, dann brauchst du nur noch die Zeile eins oberhalb zu prüfen.
cu
Chris
Anzeige
AW: mehrspaltige Listbox ohne Duplikate
12.10.2019 15:17:54
reiner
hallo Chris,
ich habe deinen Vorschlag vom 11.10.2019 11:08:25:
If InStr(Range("R10").Value, "|" & strNummern & "|") = 0 Then 
etwas abgeändert:
If InStr(Range("R10").Value, strNummern & "|") = 0 Then
und würde sagen dass nun alle Datensätze mit Ausnahme der Duplikate eingelesen werden.
Ich schließe das Thema hiermit ab, es sei denn, du möchtest noch einen ergänzenden Vorschlag machen.
reiner
AW: mehrspaltige Listbox ohne Duplikate
14.10.2019 09:01:48
ChrisL
Hi Reiner
Danke für die Rückmeldung.
Hier ein Alternativvorschlag:
Private Sub UserForm_Initialize()
Dim objDic As Object: Set objDic = CreateObject("Scripting.Dictionary")
Dim lngAnzahl As Long, lngLetzte As Long, strNummern As String
With Worksheets("Telefonnummern")
lngLetzte = .Cells(Rows.Count, 12).End(xlUp).Row
For lngAnzahl = 4 To lngLetzte
strNummern = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(.Cells( _
lngAnzahl, 8).Resize(, 5))), "")
If Not objDic.exists(strNummern) Then
objDic(strNummern) = strNummern
cboNummern.AddItem .Cells(lngAnzahl, 8)
cboNummern.List(cboNummern.ListCount - 1, 2) = .Cells(lngAnzahl, 9)
cboNummern.List(cboNummern.ListCount - 1, 3) = .Cells(lngAnzahl, 10)
cboNummern.List(cboNummern.ListCount - 1, 4) = .Cells(lngAnzahl, 11)
cboNummern.List(cboNummern.ListCount - 1, 5) = .Cells(lngAnzahl, 12)
cboNummern.List(cboNummern.ListCount - 1, 6) = lngAnzahl
End If
Next lngAnzahl
lblIndex.Caption = "Anzahl Einträge:  " & lngLetzte - 3
lblAnzahlZeilen.Caption = "Anzahl Zeilen: " & objDic.Count
End With
'Spaltenanzahl und -breite sh. Eigenschaften cboNummern --> columnwidths
With cboNummern
.Width = 426
.ColumnCount = 6
.ColumnWidths = "50;70;70;70;120;25"
End With
End Sub
cu
Chris
Anzeige
AW: mehrspaltige Listbox ohne Duplikate
14.10.2019 15:09:59
reiner
Danke für den Alternativvorschlag
reiner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige