Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Systemdaten auslesen via VBA?

Forumthread: Systemdaten auslesen via VBA?

Systemdaten auslesen via VBA?
25.06.2004 10:15:18
00011011
Guten Morgen zusammen!
Ist es möglich, die Systemdaten eines Rechners mittels VBA-Code darzustellen.
Sprich: Kann ich mir mit einer selbstgebastelten Userform anzeigen lassen, welches Betriebssystem, welche Excelversion, wieviel Speicherplatz auf dem verwendeten Datenträger frei ist und welcher CPU genutzt wird?
Vielen Dank für Eure Hilfe.
Gruß aus Köln
Christian
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Systemdaten auslesen via VBA?
Andi_H
Hi Christian,

Sub Test()
msgbox Application.Version 'gibt die Excelversion wieder
msgbox Application.OperatingSystem 'gibt das Betriebssytem zurück.
End Sub

CPU und Speicherplatz weiß ich nicht, versuchs mal über die schnellsuche.
Gruß
Andi
Anzeige
AW: Systemdaten auslesen via VBA?
25.06.2004 11:36:54
00011011
Hi Andy
Über die Schnellsuche und andere Hilfe-Dateien habe ich es schon probiert, aber leider nichts herausfinden können.
Trotzdem danke!
Du hast mir schon gut weitergeholfen.
Gruß aus Köln
Christian
AW: Systemdaten auslesen via VBA?
Andi_H
Hi Christian,
den Tip von Ralph noch mit dazu nehmen und wegen Speicherplatz, das müßte über API zu machen sein. Hab was in den FAQs gefunden (API - SYSTEM) heißt Speicherplatz ermitteln.
Müßte das sein was du suchst.
Gruß aus Bayern
Andi
Option Explicit
Private Declare Function GetDiskFreeSpace Lib "kernel32.dll" Alias _
"GetDiskFreeSpaceA" (ByVal lpRootPathName As String, _
lpSectorsPerCluster As Long, lpBytesPerSector As Long, _
lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32.dll" Alias _
"GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, _
lpFreeBytesAvailableToCaller As ULARGE_INTEGER, _
lpTotalNumberOfBytes As ULARGE_INTEGER, _
lpTotalNumberOfFreeBytes As ULARGE_INTEGER) As Long
Private Declare Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32.dll" Alias _
"GetLogicalDriveStringsA" (ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
Private Type ULARGE_INTEGER
LowPart As Long
HighPart As Long
End Type
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Const VER_PLATFORM_WIN32s = 0 ' Win 3.1 mit 32 Bit-Erweiterung
Private Const VER_PLATFORM_WIN32_WINDOWS = 1 ' Win NT/2000
Private Const VER_PLATFORM_WIN32_NT = 2 ' Win 9x
Sub GetInfos()
Dim Retval As Long, OS As OSVERSIONINFO, InputRet As String, Buffer As String
Buffer = Space(256)
Retval = GetLogicalDriveStrings(Len(Buffer), Buffer)
Buffer = Left$(Buffer, Retval)
Buffer = Replace(Buffer, "\" & vbNullChar, ", ")
InputRet = InputBox("Bitteg geben sie einen Laufwerksbuchstaben ein (" & _
Buffer & ").", "Speicher Information ermitteln", "C:\")
If InputRet = "" Or Len(InputRet) > 3 Then
MsgBox "Ungültige eingabe, Bitte geben sie nur Laufwerksbuchstaben, Doppelpunkt und Backslash ein"
Exit Sub
End If
OS.dwOSVersionInfoSize = Len(OS)
Retval = GetVersionEx(OS)
If Retval = 0 Then
MsgBox "Betriebssystem Version konnte nicht ermittelt werden."
Exit Sub
End If
With OS
Select Case .dwPlatformId
Case VER_PLATFORM_WIN32_WINDOWS
If InStr(1, OS.szCSDVersion, "B") 0 Or .dwMinorVersion > 0 Then
Call GetNewFreespace(InputRet)
Else
Call GetOldFreespace(InputRet)
End If
Case VER_PLATFORM_WIN32_NT
If .dwMajorVersion >= 4 Then
Call GetNewFreespace(InputRet)
Else
Call GetOldFreespace(InputRet)
End If
Case Else
MsgBox "Windows 3.x Version kann nicht ermittelt werden."
End Select
End With
End Sub

Private Function GetOldFreespace(ByVal Root As String)
Dim Retval As Long
Dim SC As Long, BC As Long, FC As Long, TC As Long
Dim TSpace As Long, FSpace As Long, USpace As Long
Retval = GetDiskFreeSpace(Root, SC, BC, FC, TC)
TSpace = TC * SC * BC / 1024 / 1024
FSpace = FC * SC * BC / 1024 / 1024
USpace = TSpace - FSpace
MsgBox "Gesamt: " & Format$(TSpace, "##.00 MB") & vbCrLf & _
"Belegt: " & Format$(USpace, "##.00 MB") & vbCrLf & _
"Frei: " & Format$(FSpace, "##.00 MB") & vbCrLf _
, , "Festplattenspeicher Laufwerk """ & Root & """"
End Function


Private Function GetNewFreespace(ByVal Root As String)
Dim Retval As Long
Dim CBytes As ULARGE_INTEGER, TBytes As ULARGE_INTEGER, FBytes As ULARGE_INTEGER
Dim CB  As Currency, TB As Currency, FB As Currency, UB As Currency
Retval = GetDiskFreeSpaceEx(Root, CBytes, TBytes, FBytes)
CopyMemory CB, CBytes, 8
CB = CB * 10000 / 1024 / 1024
CopyMemory TB, TBytes, 8
TB = TB * 10000 / 1024 / 1024
CopyMemory FB, FBytes, 8
FB = FB * 10000 / 1024 / 1024
UB = TB - FB
MsgBox "Gesamt: " & Format$(TB, "##.00 MB") & vbCrLf & _
"Belegt: " & Format$(UB, "##.00 MB") & vbCrLf & _
"Frei: " & Format$(FB, "##.00 MB") & vbCrLf _
, , "Festplattenspeicher Laufwerk """ & Root & """"
End Function

Anzeige
AW: Systemdaten auslesen via VBA?
25.06.2004 12:38:18
Ralph
Hallo Christian,
So kannst du Info's zum Prozessor auslesen:
Option Explicit
Private Declare Sub GetSystemInfo Lib "kernel32" (lpSystemInfo As Systeminfo)
Private Type Systeminfo
dwOEMID As Long
dwPagesize As Long
lpMinimumApplicationAddress As Long
lpMaximumApplicationAddress As Long
dwActiveProcessorMask As Long
dwNumberOfProcessors As Long
dwProcessorType As Long
dwAllocationGranularity As Long
dwReserved As Long
End Type

Private Sub Test()
Dim sysInfo As Systeminfo
GetSystemInfo sysInfo
MsgBox "Systeminfos:" & vbCrLf & _
"Prozessoranzahl: " & sysInfo.dwNumberOfProcessors & vbCrLf & _
"Prozessortyp: " & sysInfo.dwProcessorType
End Sub

Gruß
Ralph
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Systemdaten auslesen mit VBA


Schritt-für-Schritt-Anleitung

Um Systemdaten wie das Betriebssystem, die Excel-Version, den Speicherplatz und die CPU-Informationen über VBA auszulesen, kannst du folgenden Code verwenden:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Option Explicit

Private Declare Function GetDiskFreeSpace Lib "kernel32.dll" Alias _
  "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, _
  lpSectorsPerCluster As Long, lpBytesPerSector As Long, _
  lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long

Private Declare Function GetDiskFreeSpaceEx Lib "kernel32.dll" Alias _
  "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, _
  lpFreeBytesAvailableToCaller As ULARGE_INTEGER, _
  lpTotalNumberOfBytes As ULARGE_INTEGER, _
  lpTotalNumberOfFreeBytes As ULARGE_INTEGER) As Long

Private Declare Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExA" _
  (lpVersionInformation As OSVERSIONINFO) As Long

Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

Sub GetSystemData()
    MsgBox "Excel Version: " & Application.Version
    MsgBox "Betriebssystem: " & Application.OperatingSystem
    ' Weitere Funktionen zum Auslesen von Speicherplatz und CPU folgen hier...
End Sub
  1. Du kannst die Funktionen zum Speicherauslesen und CPU-Informationen, die von anderen Benutzern im Forum bereitgestellt wurden, hinzufügen.

Häufige Fehler und Lösungen

  • Fehler bei der API-Deklaration: Stelle sicher, dass die API-Deklarationen korrekt sind. Eine falsche Schreibweise kann zu Laufzeitfehlern führen.

  • Ungültige Eingabe bei Laufwerksbuchstaben: Wenn du beim Eingeben des Laufwerksbuchstabens einen Fehler machst, wird eine Fehlermeldung angezeigt. Achte darauf, nur den Laufwerksbuchstaben gefolgt von einem Doppelpunkt und einem Backslash einzugeben (z.B. C:\).


Alternative Methoden

Falls du keine VBA verwenden möchtest, kannst du auch auf PowerShell zurückgreifen, um Systemdaten auszulesen. Ein einfaches Skript könnte so aussehen:

Get-ComputerInfo | Select-Object CsName, WindowsVersion, WindowsBuildLabEx

Diese Methode bietet eine schnelle Möglichkeit, Windows-Systeminformationen auszulesen, ohne VBA zu verwenden.


Praktische Beispiele

Hier ist ein Beispiel, wie du die verfügbaren Speicherplatzdaten für ein bestimmtes Laufwerk ermitteln kannst:

Private Function GetFreeSpace(ByVal Root As String)
    Dim FreeBytes As ULARGE_INTEGER
    Dim TotalBytes As ULARGE_INTEGER
    Dim FreeSpace As ULARGE_INTEGER

    GetDiskFreeSpaceEx Root, FreeBytes, TotalBytes, FreeSpace

    MsgBox "Gesamt: " & Format$(TotalBytes, "##.00 MB") & vbCrLf & _
           "Frei: " & Format$(FreeBytes, "##.00 MB") & vbCrLf
End Function

Tipps für Profis

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem VBA-Code, um unerwartete Abbrüche zu vermeiden. Verwende On Error GoTo-Anweisungen.

  • Optimierung: Teste deinen Code regelmäßig, um Performance-Probleme zu identifizieren, besonders bei API-Aufrufen.


FAQ: Häufige Fragen

1. Wie kann ich die CPU-Informationen auslesen?
Du kannst die CPU-Informationen mit der GetSystemInfo-Funktion auslesen. Ein Beispiel findest du im Forumbeitrag von Ralph.

2. Welche Excel-Version ist für diese Funktionen notwendig?
Die bereitgestellten VBA-Codes sind mit Excel 2007 und späteren Versionen kompatibel.

3. Wie kann ich den freien Speicherplatz für alle Laufwerke anzeigen?
Du kannst eine Schleife verwenden, um alle logischen Laufwerke abzufragen und den freien Speicherplatz für jedes Laufwerk zu ermitteln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige