Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Laufwerksbuchstaben auslesen





Frage

Guten Morgen! Folgendes Problem: Ich muss sämtliche Laufwerksbuchstaben (Lokal + Netz) eruieren, welche von einem PC "benutzt" werden. Diese sollen dann inkl. dem Benutzername in einer Excel-Tabelle aufgelistet werden. Es geht nur um die Laufwerksbuchstaben. Kann man dies mit VBA auslesen? Tom

Antwort 1 von JoeKe

Moin Tom,

ja so:

Option Explicit

Sub laufwerk()
Dim objLW As Object, obI As Object, loZ As Long
On Error Resume Next
Set objLW = CreateObject("Scripting.FileSystemObject")
loZ = 1
For Each obI In objLW.Drives
Cells(loZ, 1) = obI.DriveLetter
loZ = loZ + 1
Next
Set objLW = Nothing
End Sub



Gruß

JöKe

Antwort 2 von Tomschi

Hi JöKe!

Danke schon mal!

Folgendes wäre für mich noch einfacher:
Spalte A = Benutzername/Anmeldename
Spalte B = gesamtes ABC
Spalte C = 1 wenn der Laufwerksbuchstabe vorkommt.

Läßt sich das machen?

Tom

Antwort 3 von CaroS

Hallo Tomschi,

stell Dir die Frage mal anders: Was würde es wohl für einen entsetzten Aufschrei geben, wenn ein von morgens bis abends laufendes Excel sämtliche Zugriffe des PC-Benutzers auf irgendwelche lokalen oder Netzwerklaufwerke überwachen und protokollieren würde?

Ich meine damit Zugriffe, die ein Benutzer mit dem Windows-Explorer oder mit anderen Programmen vornimmt. Was geht Excel das an? Wie soll Excel sich da "einklinken"?

Eine andere Sache wäre es, wenn es nur um Zugriffe von Excel auf Excel-Dateien ginge. Sowas lässt sich natürlich mit Excel überwachen und aufzeichnen. Aber eben nicht, wenn man mit dem Windows-Explorer nur mal eine Excel-Datei kopiert oder verschiebt, ohne sie zu öffnen.

So, nun füge ich noch hinzu, dass das mein Wissensstand ist, vielleicht wissen andere mehr als ich.

Gruß,
CaroS

Antwort 4 von JoeKe

Hallo Tom,

wenn ich alles richtig verstanden habe so:

Option Explicit

Sub laufwerk()
Dim objLW As Object, obI As Object, loZ As Range
On Error Resume Next
Range("A1").ClearContents
Columns("C:C").ClearContents
Range("A1") = Environ("UserName")
Set objLW = CreateObject("Scripting.FileSystemObject")
For Each obI In objLW.Drives
For Each loZ In Range("B1:B26")
If loZ = obI.DriveLetter Then
Cells(loZ.Row, 3) = 1
End If
Next
Next
Set objLW = Nothing
End Sub


In A1 wird der Windows-Benutzername eingetragen. In Spalte B steht das ABC (von Hand eingetragen). In Spalte C wird, wenn ein Buchstabe in Spalte B als Laufwerkbuchstabe vergeben ist, eine 1 eingetragen.

Gruß

JöKe

Antwort 5 von JoeKe

Moin CaroS,

habe ich hier etwas übersehen?
Geht es hier nicht um eine reine Auflistung aller an einen Rechner angeschlossener Laufwerke?

Gruß

JöKe

Antwort 6 von Tomschi

Hi!

@JöKe:
Sorry, aber bei mir wird nur der Name in A1 eingefügt.
Ansonsten passiert gar nichts.

@CaroS:
JöKe hat mit seiner Vermutung recht.
Es soll gar nichts mitprotokolliert werden.

Vielmehr geht es darum, dass nur die Laufwerksbuchstaben (einmalig) ausgelesen werden.
In Zukunft sollen dann gernerelle Skripts den diversen Volumes einen einheitlichen Laufwerksbuchstaben zuweisen. Daher ist es wichtig zu erfahren, welcher Buchstabe wird zur Zeit verwendet und welche sind noch frei.

Tom

Antwort 7 von Tomschi

@Jöke:
Liegt es vielleicht daran, dass ich Office2000 SP3 verwenden?

Tom

Antwort 8 von CaroS

Moin JöKe,

ob Du was übersehen hast, weiß ich nicht. Ich hab´s so verstanden, dass es um die Zugriffe des Benutzers geht, nicht um die vorhandenen Laufwerke und Mappings.
Zitat:
Ich muss sämtliche Laufwerksbuchstaben (Lokal + Netz) eruieren, welche von einem PC "benutzt" werden.

Na schön, der PC wird seine Laufwerke nicht selbstständig benutzen, so weit sind wir ja noch nicht, deshalb habe ich das mehr auf den Benutzer bezogen. Tom wird wissen, was er gemeint hat, und sich bestimmt wieder melden.

Gruß,
CaroS

Antwort 9 von JoeKe

Hallo Tom,

ob es bei Office2000 funktioniert, kann ich leider nicht überprüfen. Ich habe nur Office xp.

Lief den der erste Code?

JöKe

Antwort 10 von JoeKe

Hast du in Spalte B auch das Alphabet eingetragen ?
Großschreibung beachtet?

Antwort 11 von Tomschi

Hi JöKe!

Danke!!!
Schusslig wie ich bin, habe ich nicht den gesamten Code kopiert.

Code 1 + 2 funktionieren einwandfrei

@CaroS:
Ja, es geht ausschliesslich um das Laufwerksmapping. Mehr steckt nicht dahinter.

Tom

Antwort 12 von nighty

hi jöke :)

on error resume next stört schon ein wenig :)

gruss nighty

ein beispiel

Option Explicit
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Sub Get_Logical_Drive_String()
Dim DrvString As String
Dim TotDrvs As Long
Dim Position As Integer
Dim Anz As Integer
Dim Zaehler As Integer
TotDrvs = GetLogicalDriveStrings(0&, DrvString)
DrvString = String(TotDrvs - 1, " ")
TotDrvs = GetLogicalDriveStrings(TotDrvs, DrvString)
For Anz = 1 To Len(DrvString)
If Mid$(DrvString, Anz, 1) = ":" Then
Zaehler = Zaehler + 1
Range("A" & Zaehler) = "Laufwerk " & Mid$(DrvString, Anz - 1, 1 + 1) & " sind vorhanden"
End If
Next Anz
End Sub

Antwort 13 von JoeKe

Hi nighty,

muss ich dir recht geben On Error Resume Next ist nich der Hit.

Aber für Codes wie deiner, fehlt mir noch das KnowHow.
Werde ihn aber mal meiner Sammlung zufügen ;-)

Gruß

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: