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
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
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
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
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
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
@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
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.
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
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.
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
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?
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
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
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ß
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ß