Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1848to1852
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

Alle Laufwerke in Schleife ansprechen

Alle Laufwerke in Schleife ansprechen
06.10.2021 21:31:37
Milan
Hallo Leute,
ich möchte in VBA Code alle Laufwerke auf einmal ansprechen aber mir fehlt die Schleife.
Ich weis es nicht wie man das syntaxiert.
So habe ich angefangen, aber es ist doof so weiter zu schreiben.

If Verzeichniswahl = "C:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "D:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "E:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "F:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
End If
Kann mir jemand dabei helfen?
Gruß aus Berlin

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle Laufwerke in Schleife ansprechen
06.10.2021 22:27:02
Milan
Leider mit dem Link kann ich nichts anfangen.
Meine Mappe soll alle Verzeichnise und Unterverzeichnisse auslesen und auflisten, aber Problem kommt wenn Systemdateien im Spiel sind und die Größe.
Mit dem Code wollte ich alle Laufwerknamen zum auslesen sperren.
Das funktioniert aber sieht doof aus wenn ich alle Laufwerke von a-z so schreibe mit ElseIf bis Laufwerk "Z:\".
Wenn es keine Lösung geben sollte, lasse ich so spartanisch.
Gruß
Anzeige
AW: Alle Laufwerke in Schleife ansprechen
07.10.2021 07:26:17
ralf_b
Wenn du alle! Laufwerke sperren möchtest, dann brauchst du keine Auswahl. Nur eine Prüfung ob es sich bei dem Verzeichnis um ein Rootfolder handelt.
Siehe nochmal https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/folder-object
Da der Link zur Sprachreferenz dir angeblich nicht hilft, ist dir nicht zu helfen. Dort gibt es Beispiele. Hier im Tutorials Bereich oder im Archiv findest du sicher auch Codes zum Verzeichnis auslesen. Ist dir das alles zu schwer, dann lass die Finger davon. Klar hat Jeder mal angefangen. Aber man fängt mit lösbaren Aufgaben an und nicht mit im Moment noch Unlösbaren. Ein Verständnis der Sprache geht weit über If else hinaus.
Anzeige
AW: Alle Laufwerke in Schleife ansprechen
07.10.2021 00:36:26
Piet
Hallo Milan
ich habe bei deiner Aufgabe als erstes mal ein ernstes logisches Verständnis Problem. Du möchtest ALLE Laufwerke ansprechen, das geht ohnehin nicht gleichzeitig! Seltsam ist aber dein Code, wo du per MsgBox alle Laufwerke für Zugriff "nicht erlaubt" erklärst! Was willst du da ansprechen wenn du alle Laufwerke sperrst?
mfg Piet
AW: Alle Laufwerke in Schleife ansprechen
07.10.2021 16:16:51
Milan
Hallo Leute,
ich dachte der jenige der mir helfen möchte kann aus der Code auslesen was ich ereichen wollte. Naturlich bin ich nicht so schlau wie ihr aber neugirich und habe riesen Freude wenn ich auch etwas selbst schafe zu lösen. Leider erlebe ich mal und wieder, dass sich jemand meldet der kein Verständis hat aber auch kein Zwang zun helfen hat. Wenn jemand nicht helfen will oder meine Frage nicht verstanden hat, habe ich Verständis da zu - es ist menschlich, aber ich kann nicht Leiden wenn sich einer meldet und läst seine Hose an mir leer. Ich bin knapp 60 Jahre alt und mit meiner Geistlicheneinschränkung möchte ich mich beschäftigen womit ich Spass habe auch wenn ich die Materie nicht voll im Griff habe ansonst hätte ich mich nicht in HerberForum angemeldet genau so wie auch andere Leute.
Aber wenn dennoch jemand lust hat zu antworten ich versuche zu klären was ich ereichen wollte.
Mit dem Befehl möchte ich Verzeichnise und Unterverzeichnise auslesen aber wenn ich ein Laufwerk alleine auswähle; Excel bleibt zeitweise je nach Größe schrumpfen und zeigt "keine Rückmeldung" oder VBA Fenster springt an mit der Meldung Lufzeitfehler 53, Datei nicht gefunden und daswegen wollte ich alle Laufwerke oder am Compter angemeldete Laufwerke abfangen, wenn ich zB. Lauferk C:\ alleine wähle soll ein MsgBox mit der Meldung kommen und weitere Routine unterbrechen ohne Abstürz. So wie ich geschrieben hatte funktioniert auch aber am Ende habe ich riesen Wurst mit Laufwerken a-z und ich dachte mir frag mal die Jungs und Medels ob sie was parat haben.
Gruß
Sory
Anzeige
AW: Alle Laufwerke in Schleife ansprechen
07.10.2021 22:09:35
Piet
Hallo Milan
Sorry, ich bin sehr erschrocken, schockiert und überrascht über deine Antwort. Es war nicht meine Absicht einen Frager zu verärgern oder zu beleidigen.
Kein Interesse am helfen haben trifft bei mir nicht zu. Schau dir bitte meine Threads an, die zeigen eindeutig das ich aktiv um Lösungen bemüht bin
Für mich als alter Mann mit langer Berufserfahrung ergab der Code zunächst mal keinen logischen Sinn. Deswegen habe ich nachgefragt was du willst.
Jetzt habe ich verstanden das du evtl. Laufwerke auflisten willst. Dazu gibt es im Internet sicher über 1000 Vorschläge. Dazu solltest du wissen das es viele Varianten gibt, und viele Unterschiede in der Laufzeit der Makros. Ausserdem haben viele Internet Makros Probleme beim ganzen Laufwerk auflisten mit versteckten System Ordnern, die du nicht im Explorer angezeigt bekommst. Sie verursachen Laufzeifehler mit Programmabstützen!
Ein grosser Unterschied liegt auch in der Laufzeit des Makros. Von Sekunden bis mehrere Minuten. Mit die schnellsten Beispiele dazu stammen u.a. von Nepumuk. Im Beispiel findest du zwei Varianten von ihm. Beide können über einen xlDialog den gewünschten Ordner oder das Laufwerk auflisten. Die Tabelle1 ist eine von mir überarbeitete Version, die ich bevorzuge. Sie hat Besonderheiten, die KEIN anders Beispiel aufweist. Ich kann HTML Dateien als Ordner auflisten, ohne den Inhalt. Das erspart viel Laufzeit für unnötige Dokumente aufzulisten. Andere Beispiele im Internet sind wesentlich lanfsamerr. Ich weiss das weil ich seit einiger Zeit ca. 30 verschiedene Makros nach und nach teste um herauszufinden wie gut sie sind. Da bekommt man viel Erfahrungen wer am besten programmieren kann.
Wenn du in Tabelle1 in Zelle C1 den Pfad angibst startet das Makro direkt mit diesem Pfad. Löschst du die Zelle kommt der xlDialog welchen Ordner du suchst.
Würde mich freuen wenn dieses Beispiel deinen Vorstellungen entspricht, oder dir wenigstens bei der Problemlösung weiterhilft.
https://www.herber.de/bbs/user/148499.xlsm
mfg Piet
Anzeige
AW: Alle Laufwerke in Schleife ansprechen
08.10.2021 00:26:01
Milan
Hallo Piet,
erstmal Entschuldigung an dich, meine Unzufriedenheit ging nicht auf dein Beitrag, und Sorry für meine Grammatik.
Leider seid drei Tage suche ich ein Ansatz womit ich was Anfangen kann, aber gefunden habe ich nur ein einzige Beitrag der in die Richtung läuft wie ich mir gewünscht hatte, aber nach unzähligen Versuchen habe ich nicht geschaft was ich wollte sondern ich habe alles zum Auflisten gesperrt.
In der Mappe die du mir geschickt hast habe ich auch was interessantes gefunden, dass man Systemverzeichnise nicht öffnet. Das versuche ich die Tage zu verstehen.
Ich habe eine Lösung gefunden die Verzeichnise und Dateien per Hyperlink öffnet und sortiert und die habe ich einwenig erweitert und umgebaut.
Ich habe die Code in die länge geschrieben weil ich nicht in der Lage bin kürzer zu fassen, aber macht das was ich ereichen wollte und zwar einpaar Verzeichnise und alle Laufwerke zum Auflisten zu blocken, weil Excel bleibt länger geschrumpft mit der Meldung "keine Rückmeldung" oder VBA mit Laufzeitfehler...
Hier meine Lösung in Kürzform:

If Verzeichniswahl = "C:\Users" Then
MsgBox "Benutzer als Auswahl ist nicht gestattet!", vbCritical
End
End If
If Verzeichniswahl = "C:\Windows" Then
MsgBox "Windows als Auswahl ist nicht gestattet!", vbCritical
End
End If
If Verzeichniswahl = "C:\ProgramData" Then
MsgBox "ProgramData als Auswahl ist nicht gestattet!", vbCritical
End
End If
If Verzeichniswahl = "C:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "D:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "E:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "F:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "G:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "H:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "I:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "J:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "K:\" Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
Und so bis zum Laufwerk "Z". Es ist nicht so schlimm, aber Ich dachte das kann man in einpaar Zeilen fassen und ich war einfach neugirich wie schreibt man das.
Noch einmal, Vielen Dank
Gruß
Anzeige
AW: Alle Laufwerke in Schleife ansprechen
08.10.2021 07:34:21
Werner
Hallo,
frag doch einfach die Länge deines Strings Verzeichniswahl ab, das sollte für die Laufwerke doch genügen.

If Len(Verzeichniswahl) = 3 Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End If
Gruß Werner
AW: Alle Laufwerke in Schleife ansprechen
08.10.2021 18:21:29
Milan
Vielen Dank,
mit der Lösung von Gerd habe ich erstmal nicht geschaft weil die Code läuft weiter und hängt sich auf - in einer anderer Funktion mit Verweis auf Dateiname oder Dategröße in irgendeiner Zeile ? (Laufzeit 53 - Datei nicht gefunden oder Laufzeit 52 - Dateiname oder -nummer falsch). In meinem Versuch hatte ich das selbe.
Die Lösung von Werner mit einpaar zusätzlichen Zeilen funktioniert in der Funktion einwand frei.
Hier noch mal die Code:

If Len(Verzeichniswahl) = 3 Then
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "C:\Users" Then
MsgBox "Benutzer als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "C:\Windows" Then
MsgBox "Windows als Auswahl ist nicht gestattet!", vbCritical
End
ElseIf Verzeichniswahl = "C:\ProgramData" Then
MsgBox "ProgramData als Auswahl ist nicht gestattet!", vbCritical
End
End If
Gruß
Anzeige
würde ich so....
08.10.2021 19:02:10
Werner
Hallo,
...machen:

If Len(Verzeichniswahl) > 3 Then
Select Case Verzeichniswahl
Case "C:\Users"
MsgBox "Benutzer als Auswahl ist nicht gestattet!", vbCritical
Case "C:\Windows"
MsgBox "Windows als Auswahl ist nicht gestattet!", vbCritical
Case "C:\ProgramData"
MsgBox "ProgramData als Auswahl ist nicht gestattet!", vbCritical
Case Else
'hier dann der Code der ausgeführt werden soll
'wenn das Verzeichnis zulässig ist
End Select
Else
MsgBox "Datenträger als Auswahl ist nicht gestattet!", vbCritical
End If
Gruß Werner
AW: würde ich so....
10.10.2021 18:43:12
Milan
Hallo Werner,
gerade habe ich deine Erweiterung gesehen und läuft, allerdings wenn ich ein "End" nach MsgBox setze genau wie beim deinen ersten Vorschlag.
Vielen Dank
Gruß Milan
Anzeige
AW: würde ich so....
10.10.2021 23:28:51
Piet
Hallo Milan
WARNUNG vor END BEFEHL - Dieser Befehl ist sehr tückisch, verwende ihn NUR Privat, NIE am Arbeitsplatz. Ersetzte ihn dort bitte durch Exit Sub!
End stoppt alle laufenden Makros und setzt alle Öffentlichen Variablen auf Nullstring zurück! Wenn eine zweite Datei Daten aus dem Internet herunterlädt killst du evtl. den Download. Damit habe ich mir vor Jahren bei einigen Beispieldateien Ärger im Forum eingehandelt. Es führte zu bösen Abstürzen.
Ich verwende ihn fürs Forum nur zu Hause in der Testphase wenn ich Makros gezielt stoppen will um Fehler zu suchen. Ansonsten bitte immer Exit Sub verwenden.
mfg Piet
Anzeige
ich hatte...
11.10.2021 12:23:09
Werner
Hallo,
...nirgendwo ein End in meinem Code. Weder beim ersten Vorschlag noch beim zweiten.
Keine Ahnung weshalb du da irgendwo ein End einbauen willst. Das wird nicht benötigt.
Siehe auch die Erklärung von Pet.
Gruß Werner
AW: ich hatte...
11.10.2021 21:25:39
Milan
Hallo Werner,
ich habe gerade Datei gefunden auf desen Basis die Code eingesetzt hatte.
https://www.vba-wissen.de/BeispieleAnwendungen.html - Dateien eines Verzeichnisses listen
Problem ist bei mir folgendes:
1. Wenn ich ein Ordner auswähle der zu lange Pfad hat dann kommt zu Laufzeitfehler
2. Wenn ich ein Laufwerk auswähle, passiert wie in Beispiel 1., oder weil Datei zu groß ist, das Excel hängt für gewisse Zeit 1- 2 Minute mit der Meldung"Keine Rückmeldung"
Ich würste nicht wie ich damit umgehen soll und mit dem Code einzige Erfolg hatte, habe ich eben so gelöst.
Wenn ich "End" nicht einsetze kommt zwar Msg aber die Code läuft trotzdem weiter und dan habe ich problem 1. und 2.
Ich hatte auch genau so wie Ralf eine Lösung geschrieben aber kommt auch zu Laufzeitfehler in einer vorhandener Funktion
die deutet auf "Datei nicht gefunden" oder "Datei zu groß": Ich habe mir geschaut letzte ausgelesene Zeile und festgestellt, dass beim auslessen von Sytemdateien mit .htm die deklariert es als "Datei nicht gefunden" und zB. mein Virenscaner verzehnfacht alle seine Ordner in ProgramData und damit ist der Pfad zu groß. Ein Code der solche Dateien überspringt zu implemetieren war ich nicht in der Lage dann habe ich Bauerlösung gefunden.
Ein weiteres Problem habe ich auch wenn ich eine Datei mit der rechte Maustaste zu öffnen versuche für die ich kein Passendes Program habe kommt auch zum Lufzeitfehler, aber ich muss mich zufrieden stellen damit was ich habe. In dem Fall ist das nicht ein Projekt den ich für irgendeine Person gemacht habe und alles richtig funktionieren muss.
Gruß
Anzeige
AW: Alle Laufwerke in Schleife ansprechen
08.10.2021 07:39:32
ralf_b
Hallo Milan,
dann ging deine "Unzufriedenheit" also an mich. Ich werde mich nicht entschuldigen. Denn ich sehe keine Schuld darin meine Meinung zu schreiben. Nur weil du dich gleich als armes geschlagenes Opfer hinstellst, ist das noch lange nicht der Fall. Auch die Alterskarte brauchst du hier nicht ziehen.
Da du schon eine Lösung bekommen hast, die ich mir aber nicht angesehen habe, habe ich dir eine andere Variante, auf Basis deiner Vorgaben, erstellt. Das Beispiel ist weder vollständig, noch habe ich alle Möglichkeiten berücksichtigt.

Sub test()
Dim Verzeichniswahl
Dim varTmp
Dim bMsg As Boolean
Dim sInfo As String
Verzeichniswahl = "C:\Users"  'Test
If Len(Verzeichniswahl) = 3 Then
varTmp = Split(Verzeichniswahl, ":")
Select Case varTmp(0)
Case "C", "D", "E"  'usw.
bMsg = True
sInfo = "Laufwerk: " & varTmp(0)
End Select
Else
varTmp = Split(Verzeichniswahl, "\")
If UBound(varTmp) = 1 Then
Select Case varTmp(UBound(varTmp))
Case "Users", "Windows", "ProgramData"
bMsg = True
sInfo = "Ordner: " & varTmp(UBound(varTmp))
End Select
End If
End If
If bMsg Then MsgBox "'" & sInfo & "' als Auswahl ist nicht gestattet!", vbCritical
End Sub
schönen Tag noch.
rb
AW: Alle Laufwerke in Schleife ansprechen
12.10.2021 00:04:24
Piet
Hallo Milan
wenn du ein Programm haben willst das schnell auflistet und unerwünschte Systemdateien überspringt nimm meine Beispieldatei.
Der Code ist von Nepumuk. Von mir umgeschrieben um Systemfehler zu überspringen und HTML Ordner nur als Ordner aufzulisten.
https://www.herber.de/bbs/user/148558.xlsm Eines der schnellsten Auflist Programme das du finden kannst!
mfg Piet
AW: Alle Laufwerke in Schleife ansprechen
12.10.2021 17:05:21
Milan
Hallo Piet,
deine und Nepumuk Datei ist eine Perfektion gar keine Frage, läuft schnell und Fehlerfrei und in der muss ich nicht Fehler abfangen.
Nur für mich ist sehr schwer zu verkauen. Ich werde versuchen auf deiner Datei aufbauen zB. HauptOrdner und UnterOrdner untereinander zu bekommen und einzelne Dateien rechts daneben wegen für mich bessere Übersicht und wenn's klappt genau wie der andere Autor Hyperlinks einbauen damit man Ordner und Dateien einzeln öffnet. Dumm ist für mich, ich habe etwas gefunden dass, mir gefallen hat und jetzt gibt's noch was besseres und ich will jetzt Mischung aus beide.
So ist das Leben.
Von mir hast du ein großes Lob und Respekt - Superhirn eben.
Gruß

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige