NO.1
vba編程中,有時候需要獲取計算機系統信息,比如計算機名稱、ID、磁碟容量、磁碟類型等等,那麼如何來實現這個功能呢?
下面講一下,關於獲取本地信息的一個簡單方法。
這裡我們會用到一些很重要的函數(GetObject),這些函數內置在Excel應用中,只要調用即可。
其中還用到Win32_LogicalDisk class,也就是WMI下的一個類。
相關內容可以查看如下網址:
https://docs.microsoft.com/zh-cn/windows/win32/cimwin32prov/win32-logicaldisk?redirectedfrom=MSDN
NO.2
本節內容相對比較難,需要掌握的知識有一些深度,其代碼可能不是十分好理解。
如果只是拿來用一下,直接用就可以,如果要更多地掌握其核心內容,可能要花費不少時間,而且還必須對作業系統有一個十分熟悉的認識。
特別是對於系統底層的一些磁碟結構有了解,還有就是要對註冊表相關構造也有認識,再來學習本節內容就相對容易多了。
NO.3
上圖為一個例子,單擊按鈕自動查找出計算機的ID號來,ID號是每個計算機的身份識別,具有唯一性,就像個人身份證一樣。
還有一個功能就是列出本地硬碟的存儲信息,也就是存儲空間大小。
實現這個功能首先是對註冊表進行了一翻查找,找到相關信息後再和計算機屬性對比了一下。
然後利用GetObject函數調出對應數據,顯示到表格內。
其過程有點麻煩,實現最終結果卻毫無波瀾。
NO.4
下面介紹一下代碼
將獲取計算機ID功能,做成一個函數來實現,只要打開Excel調用這個函數就可將ID顯示在表格裡。
做得還是比較實用的,如果需要直接拿去調用即可。
Sub getSystemID() '''取計算機IDDim idObj, id,inobj Set idObj = GetObject("winmgmts:{impersonationLevel=impersonate}") _ .InstancesOf("Win32_OperatingSystem") For Each inobj In idObj If inobj.SerialNumber <> "" Then 'SerialNumber 計算ID號 id = inobj.SerialNumber End If Next ThisWorkbook.ActiveSheet.Range("B2").Value = idEnd Sub
getobject()將返回win32_operatingsystem下一些相關信息,裡面包含了計算機內置信息,有計算機名、系統版本號、ID等等各種你想要的。
詳細可查閱下圖
NO.5
相對來說完成這個功能是有一些難度的,畢竟要掌握的知識點比較多,交叉內容也相對複雜,所以做了一些很全面的思考。
編碼過程中還有許多函數處理,就不一一貼出來了。
把最重要的部分,如何獲取硬碟信息函數分享出來。
Sub DiskSizes() '列出硬碟信息Dim Disks, Sizes() ReDim Sizes(0) Set Disks = GetObject("winmgmts:{impersonationLevel=impersonate}") _ .InstancesOf("Win32_LogicalDisk") For Each mo In Disks If mo.Size <> "" Then ReDim Preserve Sizes(UBound(Sizes) + 1) Sizes(UBound(Sizes)) = mo.Name & "_" & mo.Size End If Next '''''''''''''''''''''''''''''' 保存至表格 ActiveSheet.Range("A2").Select Dim i As Integer For i = 1 To UBound(Sizes) With Selection.Offset(i, 0) .Value = VBA.Left(Sizes(i), 2) .Interior.Color = RGB(211, 211, 1) .Borders.LineStyle = 1 .RowHeight = 30 .VerticalAlignment = xlCenter .HorizontalAlignment = xlCenter End With With Selection.Offset(i, 1) .Formula = VBA.Replace(Sizes(i), VBA.Left(Sizes(i), 2) & "_", "", 1) .Interior.Color = RGB(211, 211, 1) .Borders.LineStyle = 1 .RowHeight = 30 .NumberFormatLocal = "0" .VerticalAlignment = xlCenter .HorizontalAlignment = xlRight .IndentLevel = 2 '縮進 End With Next iEnd Sub
功能雖簡單,但並不是說就很容易掌握,建議不是十分了解作業系統還是不要學習這個了,除沒有意義之外,再者就是學會了也不知道用來做什麼。
但做為一個對系統有特別熱愛的人來說,就必須要掌握了,不過相對了解作業系統的人來說還是很容易的,那些你所知道或不知道的東西就是在那裡,只要你去發現,它也沒不會亂跑,妥妥地拿出來。
對於靠近系統部分本不是vba的強項,所以我們要用到WMI技術,這就偏離了vba編程的常規路徑。