Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Array platzsparend definieren
#1
Lightbulb 
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
Antworten Top
#2
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 
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#3
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
Antworten Top
#4
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 
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Schmittklaus
Antworten Top
#5
Wink 
Sehr schön. Vielen Dank, das hat mir sehr weitergeholfen.

LG
Klaus
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste