vba編程,如何找出計算機ID,磁碟空間信息,一個函數的事情

2020-12-16 江覓易見

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編程的常規路徑。

相關焦點

  • excel VBA是什麼?VBA編程入門教程
    本篇將介紹excel vba是什麼?vba編程入門教程,有興趣的朋友可以了解一下!一、excel vba是什麼?VBA的英文全稱是Visual Basic for Applications,是一門標準的宏語言。VBA語言不能單獨運行,只能被office軟體(如:Word、Excel等)所調用。
  • 函數式編程,真香
    最近在研究函數式編程,真的是在學習的過程中感覺自己的思維提升了很多,抽象能力大大的提高了,讓我深深的感受到了函數式編程的魅力。所以我打算後面用 5 到 8 篇的篇幅,詳細的介紹一下函數式編程的思想,基礎、如何設計、測試等。今天這篇文章主要介紹函數式編程的思想。函數式編程有用嗎?什麼是函數式編程?函數式編程的優點。
  • 如何以計算機的方式去思考?
    而計算機則是人類創造的,從設計之初它便不是以模擬人腦為目的,因此它有其獨特的工作方式,只有理解了計算機的工作方式,才可以學會以它的方式去思考, 才可以寫出最適合計算機運行的程序代碼。在排序數組中尋找特定數字 —— 人腦 vs 計算機 round 1我們通過一個具體的例子,來說明人腦和計算機的思維方式不同,假設我們想要從一個已經排好序的數組中找出一個特定的數字。
  • read文件一個字節實際會發生多大的磁碟IO?
    藉由這個故事其實我發現了一個問題,雖然我們中的大部分人都是計算機科班出身,代碼也寫的很遛。但是在一些看似司空見慣的問題上,我們中的絕大多數人並沒有真正理解,或者理解的不夠透徹。不管你用的是啥語言,C/PHP/GO、還是Java,相信大家都有過讀取文件的經歷。我們來思考兩個問題,如果我們讀取文件中的一個字節:是否會發生磁碟IO?
  • vba編程常用英文單詞100個
    vba編程常用英文單詞100個大家好,部分朋友在公眾號留言,建議把vba
  • 計算機編程必備技巧——遞歸使用
    在餐廳吃飯的時候,我們通常是在收銀臺進行點餐,然後點餐付款成功之後會將信息傳送給後廚師傅手裡,以一個先來後到的原則,廚師每次看到的信息都是最早來點餐的人的信息,而且做完之後便刪掉了這個點餐信息,接著去做下一個人點的餐,而收銀員每回都只在待做餐列表中添加點餐信息,而不管究竟現在有多少點餐信息。因此這個待做餐列表就只有兩種操作:存入和刪除。
  • 計算機編程必備技巧——使用遞歸
    在餐廳吃飯的時候,我們通常是在收銀臺進行點餐,然後點餐付款成功之後會將信息傳送給後廚師傅手裡,以一個先來後到的原則,廚師每次看到的信息都是最早來點餐的人的信息,而且做完之後便刪掉了這個點餐信息,接著去做下一個人點的餐,而收銀員每回都只在待做餐列表中添加點餐信息,而不管究竟現在有多少點餐信息。因此這個待做餐列表就只有兩種操作:存入和刪除。
  • 機器人編程和計算機編程的不同點
    格物斯坦小坦克就大家關心的機器人編程教育和計算機編程教育做一個對比,這樣幫助大家更好地了解二者的共同性和區別。學習內容上的不同:機器人編程教育:機器人課程,不僅涉及編程的知識,還需要孩子們了解學習機械、工程、信息等方面的知識。很多時候要運用機械解決問題,強調動手能力。解決問題的過程可能狀況百出,需要細心觀察、耐心解決,更強調團隊配合能力。計算機編程教育 :學的是編程的概念,注重計算機的思維,比如算法,函數,循環。它的理論性強,通常強調要以最有效的方式去解決問題,而且是在多場景通用的解決方法。
  • 秒懂機器人編程與計算機編程的區別
    機器人編程:機器人課程,不僅涉及編程的知識,還需要孩子們了解學習機械、工程、信息等方面的知識。很多時候要運用機械解決問題,強調動手能力。解決問題的過程可能狀況百出,需要細心觀察、耐心解決,更強調團隊配合能力。
  • Excel VBA入門教程 1.6 過程和函數
    調用 Sub 過程的是一個獨立的語句,而調用函數過程只是表達式的一部分。另外,自定義函數並不允許修改工作表和單元格格式 (A UDF will only return a value it won't allow you to change the properties of a cell/sheet/workbook. )。
  • 磁碟文件如何讀寫?Python中open函數詳解
    我們知道,在使用Python打開一個文件時,一般使用的是open()函數,但是你真正了解這個函數麼?文件打開後如何進行緩存?對於大文件它是如何處理的?今天,小編帶你來詳細了解一下……Python如何讀寫文件open函數的使用當我們使用Python打開一個文件時,一般要用到open()函數,但是,
  • 工作中為什麼有必要學點VBA
    可通過插入模塊的方式創建,插入模塊完成之後,就可以在模塊中編寫VBA代碼,代碼寫在一個過程(Sub)中。一個過程/子過程是一系列的VBA語句,指示要做什麼工作。程序/過程程序(也叫作過程)是作為一個整體執行的一組語句,它指示Excel如何執行特定的任務。
  • 聲明式編程和命令式編程的比較
    map函數所作的事情是將直接遍歷整個數組的過程歸納抽離出來,讓我們專注於描述我們想要的是什麼(what)。注意,我們傳入map的是一個純函數;它不具有任何副作用(不會改變外部狀態),它只是接收一個數字,返回乘以二後的值。 在一些具有函數式編程特徵的語言裡,對於list數據類型的操作,還有一些其他常用的聲明式的函數方法。
  • Excel VBA入門教程1.1 數據和數據類型
    類似的要使用vba,也要入鄉隨俗,了解他的構成,簡單的說vba包含數據類型、 變量/常量、對象和常用的語句結構。不過呢在量和複雜度上遠低於英語,不用那麼痛苦的記單詞了,所以vba其實很簡單的。熟悉了規則之後剩下就是查官方函數啦,查Excel提供的可操作對象啦。順帶一提的是,函數其實也很容易理解,方便使用。
  • 現代C++函數式編程
    導讀: 本文作者從介紹函數式編程的概念入手,分析了函數式編程的表現形式和特性,最終通過現代C++的新特性以及一些模板雲技巧實現了一個非常靈活的pipeline
  • VBA與函數公式的一生一世,若如初見,怎奈何不再見
    在上一個章節中我們說到循環和Goto語句的使用,今天正式起航細節類的知識點,相信經過你前面的學習和積累,現在已經初步具體看懂一個簡單的代碼和寫一個簡單的代碼的能力了。因此今天和您分享的是如何在VBA中間使用函數公式和他們的前世今生。
  • 如何實現虛擬化在磁碟空間方面的擴容?
    隨著伺服器虛擬化在企業中的應用越來越廣,對寄宿其上的虛擬機系統的管理也越來越受到重視,在本文中,筆者通過實例來幫助大家如何實現虛擬機系統在磁碟空間方面的擴容。  在VSphere中擴展磁碟是一件很容易的事情,因為其擺脫了傳統磁碟的物理限制。只需輕點幾下滑鼠即可完成磁碟的擴充。  1.
  • Excel函數技巧與VBA初步入門
    2019年11月28日IF函數IF函數語法IF(logical_test,value_if_true,value_if_false)功能IF函數是條件判斷函數:如果指定條件的計算結果為
  • 什麼是計算機編程?
    於是我寫了一個 2 + 2 的函數,然後在我的屏幕上給他看答案,他的眼睛亮了起來。從那時起,我就開始思考:什麼是編程?編程背後究竟發生了什麼?當我在 2017 年第一次開始在 freeCodeCamp[2] 上學習編程時,我用的是網站內置的代碼編輯器,可以直接看到結果,然而我並沒有真正理解這背後的魔法。
  • VBA編程理論學習之談
    No.1 掌握對象方法和屬性VBA編程是一個即學即用的過程,幾乎不可能全面掌握所有對象的代碼,也不可能記住所有的對象屬性。有些是解決基本應用需求,也有一些是Excel vba基礎的對象以及屬性功能介紹。總的來說,這個月有一些進展,也有一些心得和知識積累。有幾篇比較不錯的文章持續得到展示和瀏覽,說明這方面還是做到了大多數關注。