Systeminformationen auslesen, exportieren, COLLECTION

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
thowe
Beiträge: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Systeminformationen auslesen, exportieren, COLLECTION

#1

Beitrag von thowe »

Moin!

Hier nun wie im Thread: angekündigt, die VBAstelei mit Collections

Im Gegensatz zu Dictionary ist Dollection ein Bestandteil der VBA-Standardbibiliothek

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 in der Sub-Routine "KeyExists" dargestellt.

Die Daten erfassen wir mit folgendem Snippet.

Code: Alles auswählen

Sub SystemInfosCollection()

    Set m_colSystemInfos = New Collection
    
    With m_colSystemInfos
    
    .Add Application.OperatingSystem, "Betriebssystem"
    .Add Application.Version, "ExcelVersion"
    .Add Application.UserName, "Benutzer Excel"
    .Add Environ("USERNAME"), "Benutzer angemeldet"
    .Add pc_strLicence, "Lizenz"
    
    End With

End Sub
Einen spezifischen Wert (Item) können wir wie folgt abrufen:

Code: Alles auswählen

Function GetSystemInfoCollection(strKey As String)

    'Get the System Data
    Call SystemInfosCollection
    
    'Attention you cannot check if the Key exists
    GetSystemInfoCollection = m_colSystemInfos("Betriebssystem")

End Function
Das Übertragen, einlesen inArbeitsblatt kann - beispielsweise - so erfolgen:
Auch hier gilt: Man kann noch bestimmen, ob die einzelnen Datensätze zeilenweise (bolPopulateVertically = True) oder spaltenweise (bolPopulateVertically = False) übertragen werden sollen.

Sub PopulateCollectionDataToWorksheet(Optional strSheetName As String = "SystemInfos", Optional bolPopulateVertically As Boolean = True)

Dim wksSheet As Worksheet 'The Worksheet to populate the data
Dim rngRange As Range
Set wksSheet = ThisWorkbook.Worksheets(strSheetName)
Dim varItem As Variant 'Variable: Several items in the Collection
Dim i As Long 'Counter

'Get the System Info Data
Call SystemInfosCollection

'initialize
wksSheet.Range("A1").CurrentRegion.Delete
i = 0
With wksSheet
For Each varItem In m_colSystemInfos
i = i + 1
If bolPopulateVertically = True Then 'vertically
.Cells(i, 1).Value = varItem
Else 'horizontally
.Cells(1, i).Value = varItem
End If
Next varItem
End With

End Sub

Wie angekündigt als Bonus noch ein "Workaround" wie man das Vorhandensein eines "Keys" in einer Collection überprüfen kann.
Dies funktioneert nur, wenn Key:= = Item:=! Also zum Beispiel bei Woksheet.Name (Worksheet ist - ja - eine Auflistung ("Collection").

Code: Alles auswählen

'This Function works only if the values in the collection are unique and the item is added as key too
Function KeyExists(objCollection As Collection, strKey As String) As Boolean

    On Error GoTo ErrorHandler
    
    If IsObject(objCollection.Item(strKey)) Then KeyExists = True

ErrorHandler:

End Function
Wie sich das ganze mit Dictioary umsetzen lässt, siehst du hier: https://vbasteleien.de/viewtopic.php?t=537

Viel Spaß und abschließend dank an snb.
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Systeminformationen auslesen, exportieren, COLLECTION

#2

Beitrag von d'r Bastler »

Sorry, thowe Dein Link oben klemmt :o Die Syntax für Links ist in dieser Software aber auch nicht die eleganteste ... Im Beitragseditor hilft ein ToolTipp über dem Linksymbol zur korrekten Syntax, den man dann in der Vorschau kontrollieren kann. Beispiel:

Code: Alles auswählen

[url=https://vbasteleien.de/viewtopic.php?t=538]DICTIONARY[/url]

'1. Set []: url=technischer Link
'Zwischen den Sets der Beschreibungstext
'2. Set []: /url
Dieser Link zu Deinem DICTIONARY sollte aber funktionieren.

Grüße und Dank an thowe für die Snippets
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: neuere Version zu: Systeminformationen auslesen, exportieren

#3

Beitrag von thowe »

Hallo,
hier: https://vbasteleien.de/viewtopic.php?t=620

gibt es eine weitere Lösung, die auch den Umstand abfängt, dass die korrekte Excelversion angezeigt wird, wenn Excel Version > 16
(denn mit Application.Version wird ab Excel 2016 - auch wenn Office 365 oder Excel 2019 - immer 2016 zurückgeliefert)

lg thowe
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast