Mostrar información del Sistema con macros en Excel
Porque antes que Administrador de Bases de datos son informático, me di a la tarea de buscar cómo podemos mostrar información de nuestra PC mediante macros en Excel.
En mi búsqueda encontré que la API de Windows Management Instrumentation (WMI) me daría la pauta para armar un formulario que me mostrará la información de mi PC.
Dentro de la API de WMI podemos usar lo siguiente, entre otros:
- Win32_OperatingSystem: Información del Sistema Operativo.
- Win32_Processor: Información del procesador.
- Win32_PhysicalMemoryArray: Información de memoria.
- Win32_LogicalDisk: Información de discos duros.
- Win32_LogicalDisk: Información sobre controladora de video.
- Win32_BaseService: Información de Servicios iniciados o detenidos.
Formulario para mostrar información del Sistema
Haciendo uso dela API les desarrollé un formulario para mostrar la información antes mencionada.
El formulario contiene un ComboBox el cual se llenará con el tipo de Información que deseemos mostrar. La información se mostrará en un ListBox, como se muestra en la Figura 1.
Figura 1. Formulario en Excel vba para mostrar información del Sistema.
Código vba
A continuación comparto el código vba usado en el formulario:
'----------------------------------------------------------------------------------------------------------------------------- ' Module : UserForm1 ' Author : MVP, Sergio Alejandro Campos ' Date : 30/jun/2015 ' Purpose : Mostrar información del Sistema ' Soruce : Código basado en https://sites.google.com/site/beyondexcel/project-updates/exposingsystemsecretswithvbaandwmiapi '------------------------------------------------------------------------------------------------------------------------------ ' 'BotónMostrar Información Private Sub CommandButton3_Click() Static oWMILocator As Object 'SWbemLocator Dim oWMISrvEx As Object 'SWbemServicesEx Dim oWMIObjSet As Object 'SWbemServicesObjectSet Dim oWMIObjEx As Object 'SWbemObjectEx Dim oWMIProp As Object 'SWbemProperty Static sUID As String Static sPWD As String Dim sWQL As String 'WQL Statement Dim vResult As Variant Dim TipoInfo ' On Error Resume Next ' If Me.cmbTipo.Value = "" Then Exit Sub ' Me.ListBox1.Clear ' TipoInfo = Me.cmbTipo.Value ' If oWMILocator Is Nothing Then Set oWMILocator = CreateObject("WbemScripting.SWbemLocator") End If ' sWQL = "Select * From " & TipoInfo 'Win32_OperatingSystem"" Set oWMISrvEx = oWMILocator.ConnectServer(sSystem, "root\cimv2", sUID, sPWD) If oWMISrvEx Is Nothing Then _ Err.Raise DspError, , "Could not create WMI connection to " & sSystem Set oWMIObjSet = oWMISrvEx.ExecQuery(sWQL) If oWMIObjSet Is Nothing Then _ Err.Raise DspError, , sWQL & " returned no results" For Each oWMIObjEx In oWMIObjSet For Each oWMIProp In oWMIObjEx.Properties_ If IsArray(oWMIProp.Value) Then For n = LBound(oWMIProp.Value) To UBound(oWMIProp.Value) ' Me.ListBox1.AddItem oWMIProp.Name ' Next Else ' On Error Resume Next ' Me.ListBox1.AddItem oWMIProp.Name ListBox1.List(ListBox1.ListCount - 1, 1) = oWMIProp.Value ' On Error GoTo 0 ' End If Next Next ' On Error GoTo 0 ' End Sub ' 'Botón Cerrar Private Sub CommandButton2_Click() Unload Me End Sub ' 'Al dar click en el ListBox Private Sub ListBox1_Click() ' 'Declaramos variables Dim Cuenta As Integer Dim Numero As Integer Dim j As Integer Dim i As Integer ' Cuenta = Me.ListBox1.ListCount ' 'Validamos que haya un elemento seleccionado. For j = 0 To Cuenta - 1 If Me.ListBox1.Selected(j) = True Then Numero = Numero + 1 End If Next j ' 'La hoja seleccionada se pasará al ListBox de hojas visibles. For i = 0 To Cuenta - 1 If Me.ListBox1.Selected(i) = True Then TextoSel1 = Me.ListBox1.List(i) TextoSel2 = Me.ListBox1.List(i, 1) End If Next i If IsNull(TextoSel1) Then TextoSel1 = "Nulo" If IsNull(TextoSel2) Then TextoSel2 = "Nulo" Me.lblVariable.Caption = TextoSel1 Me.lblValor.Caption = TextoSel2 End Sub ' 'Al inicial el Formulario Private Sub UserForm_Initialize() ' With Me ' .ListBox1.ColumnCount = 2 .ListBox1.ColumnWidths = "100 pt;200 pt" .cmbTipo.AddItem "Win32_OperatingSystem" .cmbTipo.AddItem "Win32_Processor" .cmbTipo.AddItem "Win32_PhysicalMemoryArray" .cmbTipo.AddItem "Win32_LogicalDisk" .cmbTipo.AddItem "Win32_VideoController" .cmbTipo.AddItem "Win32_BaseService" ' End With ' End Sub
Anexos
Descargar Mostrar propiedades del Sistema.rar
Referencia: Exposing System Secrets with VBA and WMI API