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

Makro benötigt Zuviel Ram

Makro benötigt Zuviel Ram
13.07.2023 09:49:33
Sven
Guten Tag ihr Lieben Excel-Götter,
ich hätte mal wieder ein Anliegen. Eins vor weck ich bin absolut VBA-Unerfahren. Ich habe mit mühe und Not eine Makro erstellt. Jetzt hab ich leider das Problem das dieses Makro Zuviel Arbeitsspeicher benötigt. Da der Arbeitgeber die IT-Hardware nicht aufrüsten wird, wollte ich fragen ob jemand mir dabei Helfen kann das Makro so umzugestalten, dass es weniger Arbeitsspeicher benötigt. Zudem kam beim erstellen irgendwann der Punkt dass die MsgBox nicht mehr getriggert wurde. Ich weiß nicht ob es möglich ist oder sinnhaft ist, aber vielleicht kann man das Problem ja über Funktion lösen. Sprich wen die einzelnen Überprüfungen als separate Funktionen laufen.

Hier das Makro:

Option Explicit


Sub Bild_und_Hyperlink()
Dim xFDObject As FileDialog
Dim xStrPath As String
Dim xStrPicPath As String
Dim xRgName As Range
Dim xRgKurzbezeichnung As Range
Dim xRgInsertBezeichnung As Range
Dim xRg As Range
Dim searchTerm1 As String
Dim split_filename As String
Dim cmt As Comment
Dim cy As Long
Dim file As Variant
Dim FileSystemObject As Object

Application.ScreenUpdating = False

'Ordner der Bilder
Set FileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFDObject = Application.FileDialog(msoFileDialogFolderPicker)

With xFDObject
.Title = "Bitte den Ordner für die Bilder wählen:"
.InitialFileName = Application.ActiveWorkbook.Path
.Show
.AllowMultiSelect = False
End With

'Nur wenn ein Ordner angewählt wurde
If xFDObject.SelectedItems.Count > 0 Then
xStrPath = xFDObject.SelectedItems.Item(1)
Else
MsgBox "Keinen Ordner Ausgewählt", vbInformation Or vbOKOnly, "/ Information"
Exit Sub
End If

'Hier wird die Bezeichnung ausgewählt + später Hyperlink zum Bild
Set xRgInsertBezeichnung = Application.InputBox("Bitte den Bereich für die Bezeichnung auswählen:", "Bitte die Spalte wählen", Type:=8)
If xRgInsertBezeichnung Is Nothing Then Exit Sub

'Hier wird die Kurzbezeichnung ausgewählt
Set xRgKurzbezeichnung = Application.InputBox("Bitte den Bereich für die Kurzbezeichnung auswählen:", "Bitte die Spalte wählen", Type:=8)
If xRgKurzbezeichnung Is Nothing Then Exit Sub

'Hier wird der Name ausgewählt
Set xRgName = Application.InputBox("Bitte den Bereich für den Namen wählen:", "Bitte die Spalte anwählen", Type:=8)
If xRgName Is Nothing Then Exit Sub

' Lösche alle Kommentare und Hyperlinks im ausgewählten Bereich
For cy = 1 To xRgInsertBezeichnung.Count
If xRgInsertBezeichnung(cy, 1).Value2 = "" Then Exit For
If Not xRgInsertBezeichnung(cy, 1).Comment Is Nothing Then xRgInsertBezeichnung(cy, 1).Comment.Delete
If Not xRgInsertBezeichnung(cy, 1).Hyperlinks Is Nothing Then xRgInsertBezeichnung(cy, 1).Hyperlinks.Delete
Next

'Alle Datein im Ordner und Unterordnern durchlaufen
RecursiveSearch xStrPath, xRgName, xRgKurzbezeichnung, xRgInsertBezeichnung, FileSystemObject

Application.ScreenUpdating = True

End Sub


Sub RecursiveSearch(ByVal folderPath As String, ByVal xRgName As Range, ByVal xRgKurzbezeichnung As Range, ByVal xRgInsertBezeichnung As Range, ByVal FileSystemObject As Object)
Dim file As Object
Dim folder As Object
Dim subFolder As Object
Dim searchTerm1 As String
Dim split_filename As String
Dim cmt As Comment
Dim cy As Long
Dim xStrPath As String
Dim xStrPicPath As String

Set FileSystemObject = CreateObject("Scripting.FileSystemObject")
xStrPath = folderPath
Application.ScreenUpdating = False

'Alle Datein im Ordner durchlaufen
For Each file In FileSystemObject.GetFolder(xStrPath).Files

'String vom Dateinamen säubern
If UBound(Split(file.Name, "_")) = 4 Then
split_filename = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Split(file.Name, "_")(2), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "") & _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Split(file.Name, "_")(4), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", ""), ".png", "") & _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Split(file.Name, "_")(3), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "")

' Überprüfen, ob der Dateiname "thumbs.dp" enthält
If InStr(file.Name, "thumbs.dp") = 0 Then
cy = 1
Do While xRgName(cy, 1).Value2 > ""


'String der Namen säubert
searchTerm1 = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(xRgName(cy, 1), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "") & _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(xRgKurzbezeichnung(cy, 1), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "") & _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(xRgInsertBezeichnung(cy, 1), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "")

'Beide miteinander vergleichen
If searchTerm1 = split_filename Then

'Hyperlink zur Datei in die Zelle setzen
ActiveSheet.Hyperlinks.Add xRgInsertBezeichnung(cy, 1), Address:=file.Path

'Kommentar für die Zelle festlegen
Set cmt = xRgInsertBezeichnung(cy, 1).AddComment
With cmt
.Shape.Fill.UserPicture file.Path
.Shape.Height = 260
.Shape.Width = 520
.Shape.LockAspectRatio = msoFalse
End With
End If

cy = cy + 1
Loop

Else
MsgBox "Die Datei: " & file.Name & " kann nicht zugeordnet werden. Auf Korrekten Dateiname achten!", vbCritical Or vbOKOnly, "/ Problem"
End If


Next

' Durchsuche alle Unterordner im aktuellen Ordner
Set folder = FileSystemObject.GetFolder(folderPath)
For Each subFolder In folder.SubFolders
RecursiveSearch subFolder.Path, xRgName, xRgKurzbezeichnung, xRgInsertBezeichnung, FileSystemObject
Next subFolder

Application.ScreenUpdating = True

End Sub

39
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro benötigt Zuviel Ram
13.07.2023 11:42:37
onur
Der Arbeitgeber könnte dir 1000 mal mehr Speicher besorgen, es würde nicht reichen. "Rekursive" Programmierung sollte man schon behersschen bzw man sollte erst mal den Rest beherrschen, bevor man anfängt, rekursive Programmierung zu lernen.

AW: Makro benötigt Zuviel Ram
13.07.2023 11:49:56
Sven
Danke für deine unnötig Antwort. Ich hab es zur Kenntnis genommen. Aber scheinbar beherrscht du die "Rekursive" Programmierung auch nicht. Also fühle ich mich davon nicht sonderlich angegriffen. Warum sollte sonst jemand seinen Frust mit unsinnigen Kommentaren freien Lauf lassen anstatt sein können unter Beweis zu stellen. Hoffentlich konnte ich dir helfen das es dir jetzt ein stück besser geht.

Anzeige
AW: Makro benötigt Zuviel Ram
13.07.2023 11:55:20
onur
Nix für Ungut, aber ich verstehe nicht, warum du als blutiger Anfänger glaubst, du müsstest hier auf beleidigter VBA-Gott machen, wenn man dir versucht zu helfen. Rekursive Programmiereung und Endlosschleifen sind zwei verschiedene Dinger. Deswegen: Lerne erst mal, was überhaupt "rekursive Prograsmmierung" bedeutet, statt hier andere Leute zu beleidigen !!!
Wenn man schon nix kann und Hilfe braucht, sollte man schon dankbar für Jede Kritik sein !

AW: Makro benötigt Zuviel Ram
13.07.2023 12:35:24
Sven
Nun weil dein Kommentar keine hilfe ist. Die Zeit die du für deine Kommentar verschwendet kann man effektiver nutzen. Ich versuche mir VBA selbst beizubringen. Leider sind Foren voll von unnötigen Texten. Anstatt auf eine Frage einzugehen, gibt es 50.000 Antworten wo man sich über die Frage lustig machst. Außerdem wer sagt das mein Text eine beleidigung ist?

Anzeige
AW: Makro benötigt Zuviel Ram
13.07.2023 12:43:54
onur
"Warum sollte sonst jemand seinen Frust mit unsinnigen Kommentaren freien Lauf lassen anstatt sein können unter Beweis zu stellen." Das ist schon mal eine Beleidigung und soll wohl auch noch Hauptschulpsychologie sein, um mich dazu zu bringen, dir einen neuen Code zu schreiben. Das kannst du ja mal mit deiner Oma versuchen.
Offenbar ist alles "Unsinn" für dich, was nicht direkt die Lösung deines selbstproduzierten Problems ist. Aber ich werde bestimmt nicht versuchen, einem Anfänger "rekursive Programmierung" beizubringen, erst recht nicht so einem ....... .

AW: Makro benötigt Zuviel Ram
13.07.2023 12:52:36
Sven
Bin ich absolut fein damit. Hoffe trotzdem dass es dir jetzt besser geht. Hoffentlich bessert sich dein leben bald und du kannst wieder positiv in die zukunft schauen. Ich wünsche dir noch einen schönen Tag und alles gute.

Anzeige
AW: Makro benötigt Zuviel Ram
13.07.2023 12:18:18
onur
Du benimmst dich hier wie Jemand, der gerade eben seinen Motorradführerschein gemacht hat und direkt unbedingt eine Kawasaki Ninja fahren muss.
Wenn er dann auf die Fresse fliegt, sollte er nicht beleidigte Leberwurst spielen, wenn man ihm rät, erstmal eine kleine Maschine beherrschen zu lernen.
Bei rekursiver Programmierung können selbst erfahrene Programmierer ins Schwitzen kommen. Also: lernen oder anderen Lösungsweg suchen.

Anzeige
AW: Makro benötigt Zuviel Ram
13.07.2023 12:27:11
Daniel
Hi
ich hatte da noch ein paar Fragen:

1. warum gibt dein Chef dir eine Aufgabe, für die du nicht qualifiziert bist?
2. warum erstellst du das FileSystemObject jedes mal neu, wenn du es doch als Übergabeparameter mit übergeben bekommst?
3. hast du mal geprüft, ob sich die Rekursion nicht in einer Endlosschleife von Selbstaufrufen verfängt, dh ist sichergestellt, dass der Selbstaufruf auch unterbleibt wenn das Ende erreicht ist
4. was soll das Makro eigentlich tun?

und nur so als Tipp, wenn ich aus einem Text mehrere Zeichen entfernen will, würde ich das so machen anstatt der vielen geschachtelten Replaces:

For each T in Array(",", "+", "-", ... hier alle Zeichenfolgen auflisten die raus müssen)
     ZuBearbeitenderText = Replace(ZubearbeitenderText, T, "")
Next
Gruß Daniel

Anzeige
AW: Makro benötigt Zuviel Ram
13.07.2023 12:45:12
Sven
Hallo Daniel,
Um mal auf deine Fragen einzugehen:
1. Der Chef gibt mir die Aufgabe nicht. Ich möchte mein Arbeit einfach automatisieren und vereinfachen. Sprich die Abläufe verbessern.
2. Weil ich aus diversen tutorials das als richtig erachtet habe.
3. Ja es hat fast alles richtig funktioniert. Bis zu dem Punkt wo ich die 0 entfernen wollte. Seit dem meckert excel.
4. Das Makro soll Bilder als Kommentar und den Hyperlink zu den Bildern in eine Tabelle einfügen. Also wen man eine Auswertung fährt, sollen die Diagramme einsortiert werden. Dafür müssen die 3 Schlagwörter im dateinamen übereinstimmen.

Hoffe konnte deine Fragen verständlich genug beantworten.

Anzeige
AW: Makro benötigt Zuviel Ram
13.07.2023 14:19:45
Daniel
das mit der 0 (3.) verstehe ich nicht.
wo hast du die 0 entfernt?
muss man das FileSystemObjekt hier überhaupt rekursiv durchsuchen?
ist es nicht in der Lage, auch gleich alle Unterordner zu durchsuchen? ich kenn mich da nicht so aus.
Gruß Daniel

AW: Makro benötigt Zuviel Ram
13.07.2023 14:39:27
Sven
Ob man das FileSystemObjekt überhaupt hier wichtig ist, kann ich dir leider nicht verraten. Hab den Code aus einem YT-Tutorial übernommen und in das Makro eingepflegt.

Bezüglich der 0... witzig das du fragst... scheinbar hab ich die funktionierende Version des Codes verschickt xD es gibt noch eine weitere die enthält folgenden abschnitt:

'String vom Dateinamen säubern
If UBound(Split(file.Name, "_")) = 4 Then
split_filename = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Split(file.Name, "_")(2), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "") & _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Split(file.Name, "_")(4), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", ""), ".png", "") & _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Split(file.Name, "_")(3), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "")

If Mid(split_filename, InStr(split_filename, "_") + 1, 1) = "0" Then
split_filename = Replace(split_filename, "0", "")
End If

If Mid(split_filename, InStrRev(split_filename, "_") + 1, 1) = "0" Then
split_filename = Replace(split_filename, "0", "")
End If

' Überprüfen, ob der Dateiname "thumbs.dp" enthält
If InStr(file.Name, "thumbs.dp") = 0 Then
cy = 1
Do While xRgProbestelle(cy, 1).Value2 > ""
'String der Probenamestelle säubern
searchTerm1 = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(xRgProbestelle(cy, 1), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "") & _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(xRgKurzbezeichnung(cy, 1), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "") & _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(xRgInsertBezeichnung(cy, 1), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "")


Ich stehen gerade bezüglich deines Tipps etwas auf dem Schlauch. Wen ich das richtig verstehe würde der Code ja dann so aussehen, ist das richtig?

'String vom Dateinamen säubern
If UBound(Split(file.Name, "_")) = 4 Then
split_filename = Split(file.Name, "_")(2) &_
file.Name, "_")(4) &_
file.Name, "_")(3)

If Mid(split_filename, InStr(split_filename, "_") + 1, 1) = "0" Then
split_filename = Replace(split_filename, "0", "")
End If

If Mid(split_filename, InStrRev(split_filename, "_") + 1, 1) = "0" Then
split_filename = Replace(split_filename, "0", "")
End If

' Überprüfen, ob der Dateiname "thumbs.dp" enthält
If InStr(file.Name, "thumbs.dp") = 0 Then
cy = 1
Do While xRgProbestelle(cy, 1).Value2 > ""


'String der Probenamestelle säubern
searchTerm1 = xRgProbestelle(cy, 1) & _
xRgKurzbezeichnung(cy, 1) & _
Replace(xRgInsertBezeichnung(cy, 1)

For each T in Array(",",";",".",":","-","#","'","+","*",""","!","%","/","(",")","\","&")
ZubearbeitenderText = Replace(ZubearbeitenderText, T, "")
Next

Anzeige
AW: Makro benötigt Zuviel Ram
13.07.2023 14:52:35
Daniel
sieht für mich so aus, als ob du ne Grundlagenausbildung in VBA brauchst und Programmierung brauchst.
das ist über ein Forum sehr schwierig und anstrendend. Foren sind für Menschen, die zumindest mal Grundlagen kenntnisse haben.
Gruß Daniel

AW: Makro benötigt Zuviel Ram
13.07.2023 14:57:56
Sven
Das mir diese Ausbildung fehlt ist richtig. Jedoch bin ich anderer Meinung was Foren angeht. Ich finde Foren sind dazu da sich auszutauschen und Hilfestellung zu geben. Da ist es egal wie der Kenntnisstand ist. Die Erfahrung und Wissen kann man sich aneignen... in Foren zum Beispiel. Jedoch Werte ich deine Aussage als Nein auf meine Frage.

Anzeige
AW: Makro benötigt Zuviel Ram
13.07.2023 16:41:09
Daniel
es kostet halt viel Zeit, jemanden die Grundlagen zu erklären, vorallem wenn man alles nur schriftlich tun kann.
irgendwann stellt sich dann auch dem idealistischten Forenteilnehmer die Fragen von Aufwand und Nutzen.

du hättest hier erkennen sollen, dass du nicht einfach nur meinen Code kopieren und irgendwo einfügen brauchst, sondern dass du diesen Teil:

searchTerm1 = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(xRgProbestelle(cy, 1), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "") & _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(xRgKurzbezeichnung(cy, 1), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "") & _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(xRgInsertBezeichnung(cy, 1), " ", ""), ",", ""), "-", ""), "%", ""), "&", ""), "/", ""), "(", ""), ")", ""), "\", ""), """", ""), ":", ""), ";", ""), "+", "")
so umschreiben musst
searchTerm1 = xRgProbestelle(cy, 1) & xRgKurzbezeichnung(cy, 1) & xRgInsertBezeichnung(cy, 1)
for each T in Array(" ", ",", "-", "&", "/", "(", ")", "\", """", ":", ";", "+")
    serarchterm1 = Replace(searchterm1, T, "")
Next
Gruß Daniel

Anzeige
AW: Makro benötigt Zuviel Ram
13.07.2023 16:53:27
Sven
Ja das verstehe ich. Auch wen es so aussieht, bin ich nicht davon ausgegangen... Ich gehe davon aus dass ich es auch mit split_filename auch so ähnlich aufbauen muss.

split_filename =Split(file.Name, "_")(2) & Split(file.Name, "_")(3) & Split(file.Name, "_")(4)
for each T in Array(" ", ",", "-", "&", "/", "(", ")", "\", """", ":", ";", "+")
split_filename = Replace(searchterm1, T, "")
Next
So oder so ähnlich... müsste es morgen mal ausprobieren wie es richtig funktioniert. Hab schon paar Idee was raus müsste... denke ein Split sollte reichen.

Danke für deine Hilfe.
Kann man mit deinem Code auch sagen dass das erste Zeichen nach _(2) und _(4) Replaced werden soll wen es sich dabei um eine 0 handelt oder braucht man dafür einen eigenen?

TS benötigt zuviel Raum und hat keine Ahnung
13.07.2023 15:11:46
snb
oWT

AW: Makro benötigt Zuviel Ram
13.07.2023 22:33:58
Pappawinni
Tschuldigung, aber das ist richtig übler Code.

Du müsstest vielleicht erst lernen, wie man Code sinnvoll strukturiert.

und vielleicht tust du dir und uns einen Gefallen und postest das nächste mal wenigstens den Code mit Code-Tags. Das macht man mit den Knöpfchen da über dem Fenster in dem man Beiträge schreibt.
Da kann man auch fett oder kursiv schreiben....
Immerhin schreibst du ja schon Kommentare rein, allerdings erzählt mir
'Alle Datein im Ordner und Unterordnern durchlaufen
auch nicht viel
Wozu werden da Dateien im Ordner und Unterordnern durchlaufen... das wäre vielleicht interessant...

Rekursionen blähen sich ja leicht im Speicher auf, etwa wie ein Baum, vom Stamm bis hin zu den Blätter um bei Erreichen der Blätter ( bei Erreichen der Abbruchbedingung ) wieder in sich zusammen zu klappen, nur mit dem Nachteil, dass die Zweige so fett sind wie der Stamm und die Blätter ebenso. Das heißt, dass das speicherintensiv werden kann. Insofern sollte man da nicht mehr als nötig hinein packen.
Typische Anwendung ist die Filesuche. Da sammelt man halt dann z.B. bestimmte Dateien in einem Array oder einer Collection usw. und arbeitet die anschließend ab.
Wenn du die Abarbeitung in die Rekursion mit hinein packst, könnte das evtl. ein gigantischer Mammutbaum werden......
Wenn man den Speicher voll hämmern will, mit Rekursionen geht das gut.

AW: Makro benötigt Zuviel Ram
14.07.2023 05:45:30
Sven
Guten Morgen,
Ja der Code ist richtig wild, ich weiß. Kann dein Ratschlag natürlich berücksichtigen.
'Alle Datein im Ordner und Unterordnern durchlaufen bedeutet: Wir haben ein Ordner in dem sind Ordner mit Jahreszahlen, in diesem Ordner befinden sich Ordner mit Monatsnamen, in diesem Ordner sind Ordner mit Namen von Standorten, in denen sind Ordner mit Bereichen und in diesen Ordnern sind Statistiken. Ziel ist es den Ordner mit dem Monatsnamen auszuwählen und das Makro soll alle unterordnen durchlaufen. Wen wir ei e Auswertung fahren erhalten wir ein csv Datei und das Makro soll die Statistiken dann in die Tabelle einfügen. Natürlich nicht in die csv sondern in eine zuvor bereinigte datei. Hoffe konnte dir die Frage beantworten.

Rekrusion war nur ein Lösungsansatz und nicht das endgültige Ziel.

AW: Makro benötigt Zuviel Ram
14.07.2023 09:44:46
Pappawinni
Das heißt, du suchst eigentlich nur xlsx Dateien und darüber ist nur eine Ordnerstruktur in der sonst nichts ist? Oder was?

AW: Makro benötigt Zuviel Ram
14.07.2023 09:59:41
Daniel
ich kenn mich nicht so aus, aber man müsste das FileSystemObject doch anweisen können, auch die Unterordner zu durchsuchen, wenn man nach einem Dateinamen sucht, oder?
Rekursion braucht man, wenn man mir DIR sucht, weil das immer nur in einem Verzeichnis sucht.
Gruß Daniel

AW: Makro benötigt Zuviel Ram
14.07.2023 10:07:00
Sven
Nein es heißt ich suche nach .png in einer Ordnerstrucktur wo durchaus auch Dateien liegen könnten. Wen ich dieses Makro irgendwann zusammen gebastelt habe ist der weitere Plan es auf PDF Dateien umzuschreiben. Dann wäre es auch so das die Dateien wild im Laufwerk verteilt sind. Aber erstmal möchte ich eine Grundfunktion hinbekommen. Der Daniel hat mir bereits einen guten Tipp zum Makro gegeben, den ich im Moment umsetze. Falls ich heute morgen mich schlecht ausgedrückt habe, tut es mir leid... war noch etwas müde.

AW: Makro benötigt Zuviel Ram
14.07.2023 10:22:07
Pappawinni
Also PNG Dateien im 4ten Unterlevel, oder so?

AW: Makro benötigt Zuviel Ram
14.07.2023 10:31:02
Sven
sagen wir im 4ten+ (vom ausgewählten gezählt -Es gibt noch ca. 5 vorhergegangene Ordner-) es kann manchmal vorkommen dass noch mehr Unterordner erstellt werden, was eher selten bis kaum passiert.

AW: Makro benötigt Zuviel Ram
14.07.2023 10:50:26
Pappawinni
Hier
https://www.herber.de/forum/archiv/1932to1936/1935699_VBA_aus_N_Dateien_Text_auslesen.html#1935768
hatte ich eine Funktion eingebaut, die ab einem bestimmten Ordner Dateien einer bestimmten Extension sucht und eine Collection mit den vollständigen Dateipfaden der gefundenen Dateien liefert.
Im diesem Anwendungsfall wird sie zwar nicht rekursiv verwendet, aber man kann sie rekursiv verwenden.
Schau dir vielleicht einmal dieses Beispiel an. Ich fürchte allerdings, dass du das kaum nachvollziehen kannst....

AW: Makro benötigt Zuviel Ram
14.07.2023 11:15:18
Frank
Mich wundert, das jemandem, der sich so benimmt auch noch geholfen wird. Die meisten Experten sind hilfsbereit und wissen, wovon / worüber sie sprechen. Und wenn dann jemand als "VBA- unerfahren" daher kommt und andere angiftet bzw. beleidigt, dann versteh ich die Welt nicht mehr. Und das Sven "nur" eine Lösung für sich sucht, glaube ich nicht.
Wenn wir eine Auswertung fahren
Das gäbe mir schon zu denken, wenn ich einer dieser Experten wäre.
Ich habe fertig :-D
Gruß Frank

AW: Makro benötigt Zuviel Ram
14.07.2023 11:34:21
Sven
Danke Frank für dein Kommentar. Schön das du alle Beiträge für dich gelesen hast. Nun da dir scheinbar entgangen ist dass ich das Makro für die Arbeit erstelle und ich mit meinen Kollegen zusammen arbeite hab ich bewusst "wir" geschrieben. Aber ist Ok, scheinbar brauchst du auch ein Ventil. Nur zu...
Ich gebe zu bedenken das ich nicht derjenige war der jemanden angegiftet hat. Wen man auf eine Frage direkt eine Derartige Antwort bekommt: "Der Arbeitgeber könnte dir 1000 mal mehr Speicher besorgen, es würde nicht reichen. "Rekursive" Programmierung sollte man schon behersschen bzw man sollte erst mal den Rest beherrschen, bevor man anfängt, rekursive Programmierung zu lernen." das ist im übrigen alles was ich als Antwort bekommen habe, obwohl ich gesagt habe "ich bin ein Blutiger Anfänger" ist einfach herablassend. Wen du in einem Aquaristikforum fragst welche Pflanzen du in dein Aquarium machen solltest, und man dir sagen das du gefälligst zu erst ein Bechlor in Meeresbiologie absolvieren sollst bevor du solche Fragen stellst, würdest du genau so reagieren wie ich.

Das sind aber Grundsatz Diskussionen die hier weder zielführend sind, noch wird man auf den selben Nenner kommen.

AW: Makro benötigt Zuviel Ram
14.07.2023 16:11:29
Oberschlumpf
moin

am Ende schreibst du: Das sind aber Grundsatz Diskussionen die hier weder zielführend sind, noch wird man auf den selben Nenner kommen.

aber der gesamte - von dir erstellte - vorher stehende Absatz ist dann doch auch - nicht zielführend - oder????
Oder gilt der Grundsatz "zielführend sein zu müssen" nur für die Anderen...aber nicht für dich???

Sorry, ich verstehe diesen, von dir erstellten Widerspruch, in deinem Beitrag nicht - deswegen antworte ich darauf, bzw frage nach...

ciao

AW: Makro benötigt Zuviel Ram
14.07.2023 11:18:24
Sven
Danke das du mir das Bsp. gesendet hast, wobei ich nicht ganz nachvollziehen kann, warum du das tust, wen du derartige Befürchtungen hast.
Leider bringt mir das Bsp. aus unterschiedlichen gründen nix. Es sind z.B. keine eindeutig festen Ebenen, die Ordner Leben und werden mehr und weniger, unser Netzwerkstrukturen haben ein Problem mit VBA weshalb einige Codes so nicht funktionieren. Ich hatte bereits einige Codes probiert welche die Ordnerstruckturen durchlaufen. Leider sagt unser Netzwerk bei sehr vielen "nö du hast keine Berechtigung dazu". Hinzu kommt oft das Problem das wen das Makro bei mir funktioniert und ich die Datei ins Netzwerk stelle das meine Kolleg*innen eben auch die Meldung "ist nicht" bekommen obwohl es bei mir funktioniert. Diese Methode die ich gewählt habe ist so die die am Besten bisher funktioniert hat, bisher zumindest.

AW: Makro benötigt Zuviel Ram
14.07.2023 11:36:19
Pappawinni
Ok, da will ich dich dann nicht weiter beraten, wenn das was du da machst soo gut ist.

AW: Makro benötigt Zuviel Ram
14.07.2023 11:42:42
Sven
Ok das ist schade. Aber werte es nicht als angriff auf dein können. Ich wollte dir nur erklären warum das Bsp. für mich ungeeignet ist.

AW: Makro benötigt Zuviel Ram
14.07.2023 14:51:49
Pappawinni
Das wesentliche Problem im Netzwerk ist, dass ein User möglicherweise ein Netzwerklaufwerk als H: gemappt hat, ein anderer als J: noch ein anderer ein Unterverzeichnis als K:. Alle User können dann zwar Dateien ab einem gewissen Ordner sehen, aber die Pfade sind natürlich völlig verschieden.
Wenn dass Excel Makro in dem Pfad die Suche beginnt, in dem es selbst liegt, also ThisWokbook.Path sollte das aber keine Hürde sein, solange alle User die gleichen Rechte unterhalb dieses Ordners haben.
Wenn User unterschiedliche Rechte haben wirst du das wahrscheinlich mit dem schönsten Code nicht umgehen können.
Im Übrigen, wenn du Code beurteilst, wäre es sinnvoll, wenn du den Code verstehen würdest. Dazu müssste man sich den aber wenigstens auch angeschaut haben....

AW: Makro benötigt Zuviel Ram
14.07.2023 15:33:45
Sven
Interessant scheinbar gibt es auch nettere Worte.

Da bei uns alle die selben Rechte haben, alle den selben Pfad auf dem Laufwerk J: haben und das von mir geschilderte Problem weiterhin besteht, denk ich dass es möglich ist ein Makro zu erstellen mit dem alle arbeiten können.

Da du mir eh unterstellt hast das ich dein Makro weder verstehen noch lesen kann, weiß ich nicht warum du jetzt mir unterstellst das ich es mir nicht angeschaut habe.

Du hast mir bereits gesagt dass du nicht mehr helfen möchtest. Somit lass es gut sein

AW: Makro benötigt Zuviel Ram
14.07.2023 17:54:11
Pappawinni
Dir ist auch wirklich nicht zu helfen...

AW: Makro benötigt Zuviel Ram
14.07.2023 17:58:10
Sven
Nein du kannst mir definitiv nicht helfen. Das weiß ich und bin vollkommen fein damit. Hier gibt es aber tatsächlich Leute die mir geholfen haben das Problem zu lösen und es ist schön das nicht alle gleich ticken wie manch andere.

AW: Makro benötigt Zuviel Ram
14.07.2023 17:59:03
onur
Geh mit Gott, aber geh endlich....

AW: Wie im Märchen
14.07.2023 23:18:20
Pappawinni
Es war einmal ...
...ein Mann, der wollte ein Haus bauen. Leider hatte er davon keine Ahnung, dachte aber, dass er das könne und freute sich, als er es tatsächlich geschafft hat ein paar Wände zu mauern, ohne dass die einstürzten, ok gut ausgesehen hat das irgendwie nicht, alles war schief und krumm, egal, er entschloss sich, da nun eine Gewölbedecke drauf zu setzen, als das nicht recht gelingen wollte und das Ganze einzustürzen drohte, holte er sich Rat bei Maurermeistern. Diese schlugen Angesichts des Bauwerks erst einmal die Hände über dem Kopf zusammen. Die Mehrzahl hätte grundlegende Änderungen machen wollen, einer aber gab dann trotz des ungeeigneten Unterbaus ein paar Hinweise, wie man weiter machen könnte und da freute sich der Mann und baute weiter. Die anderen Baumeister schickte der Mann weg, da sie ihm ohnehin nicht helfen konnten und er doch schließlich selbst herausgefunden hätte, dass Haus bauen nicht anders funktioniert.
Bleibt nur zu hoffen, dass dem Mann die Hütte mal nicht vor die Füße fällt, oder vielleicht doch ?

AW: Wie im Märchen
15.07.2023 00:59:12
Frank
Schade, dass meine Kinder schon groß sind, dieses Märchen hätte ich Ihnen glatt vorm Einschlafen erzählt :-D
Gut´s Nächtle
Frank

AW: Makro benötigt Zuviel Ram
14.07.2023 11:27:09
Pappawinni
Ich sehe gerade, ich hab da wieder mal herumgespielt und
Dim SubResult As Collection
statt
Dim SubResult As New Collection

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige