Clever-Excel-Forum

Normale Version: Array platzsparend definieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo, :19:
ich benötige ein Array welches den Pfad, den Dateinamen und die Dateigröße beinhaltet.
Die Daten werden aus einem Verzeichnis + Unterverzeichnis >3000 Dateien ausgelesen.

Bisher habe ich mein Array so definiert.

Code:
Dim arr_Files As Variant
ReDim arr_Files(Datei_Anzahl, Datei_Anzahl, Datei_Anzahl)
Leider ist der Arbeitsspeicher dafür zu klein.
1.) Kann das Array anstatt als "Variant" auch anders definiert werden und die Daten trotzdem aufnehmen?
Ich denke da an z.B. String oder an  Collection und Dictionary, falls es diese gibt.
Derzeit nutze ich Windows 10 und Office 365
Welcher DataType ist am besten?
2. Gibt es eine Möglichkeit den Arbeitsspeicher abzufragen damit es nicht zu einem Fehler kommt?
LG Klaus
Studiere mal erst 'Arrays' : http://www.snb-vba.eu/VBA_Arrays_en.html
PHP-Code:
Sub M_snb()
   sn=split(createobject("wscript.shell").exec("cmd /c dir ""G:\OF\*.*"" /b/s/a-d").stdout.readall,vbrlf)

   redim sp(ubound(sn),2)

  for j=0 to ubound(sn)-1
    sp
(j,0)=dir(sn(j))
    sp(j,1)=replace(sn(j),sp(j,0),"")
    sp(j,2)=filelen(sn(j))
  next

  sheet1
.cells(1).resize(ubound(sp),3)=sp
End Sub 
Hallo snb,

ersteinmal vielen Dank für diesen interessanten code. Sehr starke Lösung.

Abgesehen davon, dass ich vbrlf durch vbcrlf ersetzt habe, habe ich noch das Problem, dass die Dateinamen ohne die Umlaute eingelesen werden.
Sprich statt Blätter.doc wird Bl„tter.doc eingelesen.

Bei
Code:
sp(j,2)=filelen(sn(j))t]


wird die Datei(mit Umlauten) (Bl„tter.doc) nicht gefunden.

Gibt es eine Möglichkeit die codepage vor dem Einlesen festzulegen?
Oder geht das nur mit Ersetzen der falschen UmlauteZeichen.

LG
Klaus
Besser wäre: keine Umlaute verwenden in path/filenames

PHP-Code:
Private Declare Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As StringByVal lpszDst As String) As Long
       
Public Function F_ASC_ANS(ByVal Text As String) As String
  OemToCharA Text
Text
  F_ASC_ANS 
Text
End 
Function

Sub M_snb()
   sn=split(F_ASC_ANS(createobject("wscript.shell").exec("cmd /c dir ""G:\OF\*.*"" /b/s/a-d").stdout.readall),vbCrLf)

   
redim sp(ubound(sn),2)

  for 
j=0 to ubound(sn)-1
    sp
(j,0)=dir(sn(j))
    
sp(j,1)=replace(sn(j),sp(j,0),"")
    
sp(j,2)=filelen(sn(j))
  
next
End Sub 
Sehr schön. Vielen Dank, das hat mir sehr weitergeholfen.

LG
Klaus