Ein Spickzettel wie man sich - beispielhaft - Systeminformationen auslesen kann.
Dies folgenden Codes können auch für wietere "APP" und oder "SYSTEM"relevante Daten verwendet werden.
Beispielhaft, ob für die Nutzung des Excel-Makros eine gültige Lizenz vorliegt.
Das Einlesen erfolgt wie die Überschrift zeigt über Dictionary.
WICHTIG: Dictionar funktinieren nur in Windows-Betriebssystem, NICHT in Apple Operating Systems
Daher wird ein zweiter Thread das Einlesen via Collection durchführen, siehe hier: Umsetzung via Collection.
Die grundlegenden Unterschiede zwischen Dictionary und Collection sind:
Bei COLLECTION gilt:
- Es ist nicht überprüfbar ob ein Key existiert
- Man kann nicht das Item(Wert/Value) verändern, wenn das Item zum Key gespeichert ist. (-> da ein Objekt)
-> es gibt eine einzige Ausnahme, dies wird im Thread zur Collection erläutert.
Wie funktioniert nun das Ganze:
Dictionary ist nicht Bestandtei der Standardbibiliothek von VBA.
Es ist ein Element der "Microsoft Runtime Library"
Man kann diese Bibiliothekt wie folgt aktivieren
- Extras > Verweise > Microsoft Runtime Library "anhacken" (Kontrollkästchen aktivieren)
- oder via VBA CodeSnippet aktivieren: siehe hier: Spickzettel zu References and GUIDS
mit SystemInfosDictionary füllen wir das Dictionary mit Datensätzen (Key, Item)
-> Achtung bei Collection ist es genau umgekehrt (Item, Key)!
Code: Alles auswählen
Sub SystemInfosDictionary()
Dim varKey As Variant
'initialize
Set m_dicSystemInfos = New Scripting.Dictionary
With m_dicSystemInfos
.Add "Betriebssystem", Application.OperatingSystem
.Add "ExcelVersion", Application.Version
.Add "Benutzer Excel", Application.UserName
.Add "Benutzer angemeldet", Environ("USERNAME")
.Add "Lizenz", pc_strLicence
End With
lngNumberSystemInfos = m_dicSystemInfos.Count
End Sub
Mit GetSystemInfoDictionary kann man explizit einen Key und den dazugehörigen Wert (Item, Value) abfragen.
Code: Alles auswählen
Function GetSystemInfoDictionary(strKey As String)
'Get the System Data and
'check if not Dictionary is NULL (Nothing)
If m_dicSystemInfos Is Nothing Then Call SystemInfosDictionary
If m_dicSystemInfos.Exists(strKey) Then GetSystemInfoDictionary = m_dicSystemInfos(strKey)
End Function
Wobei man hier noch wählen kann ob die einzelnen Datensätze zeilenweise (bolPopulateVertically = True) oder spaltenweise (bolPopulateVertically = False) übertragen möchte.
Code: Alles auswählen
Sub PopulateDictionaryDataToWorksheet(Optional strSheetName As String = "SystemInfos", Optional bolPopulateVertically As Boolean = True)
Dim wksSheet As Worksheet
Dim rngRange As Range
Set wksSheet = ThisWorkbook.Worksheets(strSheetName)
'Get the System Info Data
Call SystemInfosDictionary
'initialize
wksSheet.Range("A1").CurrentRegion.Delete
If bolPopulateVertically = True Then
Set rngRange = wksSheet.Range("A1").Resize(lngNumberSystemInfos, 1)
rngRange.Value = WorksheetFunction.Transpose(m_dicSystemInfos.Keys)
Else
Set rngRange = wksSheet.Range("A1").Resize(1, lngNumberSystemInfos)
rngRange.Value = m_dicSystemInfos.Keys
End If
If bolPopulateVertically = True Then
Set rngRange = wksSheet.Range("B1").Resize(lngNumberSystemInfos, 1)
rngRange.Value = WorksheetFunction.Transpose(m_dicSystemInfos.Items)
Else
Set rngRange = wksSheet.Range("A2").Resize(1, lngNumberSystemInfos)
rngRange.Value = m_dicSystemInfos.Items
End If
End Sub
Abshließen noch eine praktische Basteilei mit Arbeitsblättern (Worksheets)
-> damit lässt sxich kinderleicht das Vorhandensein eines Arbeitsblattes ermitteln
Ganz zum Schluss: Ein Dank (in alphabetischer Folge) an: Chandoo, Francis und snb