Lấy thông số cpu của máy tính ra một cell trong sheet (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

mitomcombui

Thành viên mới
Tham gia
7/9/07
Bài viết
19
Được thích
1
Chào mọi người, mình có một bài toán thế này: Mình cần lấy thông số CPU của máy tính ra một ô trong 1 sheet chỉ bằng 1 cái click chuột ngay trên Nút bấm(có chứa đường link) trong sheet đó hoặc sheet khác. Mình đã lấy được thông số CPU rồi nhưng là một form hiển thị độc lập so với sheet đó. Vấn đề bây giờ là chuyển các thông số đó vào một ô cụ thể.
Đây là file mình đã lấy được thông số CPU: View attachment Book1.xls
Nhờ mọi người giúp đỡ. Cảm ơn nhiều!!!
 
Chào mọi người, mình có một bài toán thế này: Mình cần lấy thông số CPU của máy tính ra một ô trong 1 sheet chỉ bằng 1 cái click chuột ngay trên Nút bấm(có chứa đường link) trong sheet đó hoặc sheet khác. Mình đã lấy được thông số CPU rồi nhưng là một form hiển thị độc lập so với sheet đó. Vấn đề bây giờ là chuyển các thông số đó vào một ô cụ thể.
Đây là file mình đã lấy được thông số CPU: View attachment 61679
Nhờ mọi người giúp đỡ. Cảm ơn nhiều!!!

Vào một ô cụ thể : là vào một cell bảng tính? Nếu thế thì Code trong Sheet của bạn có lệnh
PHP:
 MsgBox "Processor Id: " & objItem.ProcessorId
sửa lại
PHP:
 Range("A1").Value = objItem.ProcessorId
..................................
Nghĩ cũng lạ bạn làm được code như vậy mà không xuất ra được bảng tính ??? ==> Mình hiểu sai ý chăng?
 
Upvote 0
Bạn không hiểu sai ý mình đâu.Cảm ơn bạn nhé!
Còn một phần nữa là làm sao để mình chỉ cần click chuột vào 1 nút hoặc một chữ gì đó thì nó hiện ra sheet chứa ô đó chứ không phải vào: Tools/Macro/Sheet2.GetCPUID/Run nữa (Cái này có vẻ khó hơn).
Nhờ mọi người giúp đỡ.Thanks!
 
Upvote 0
Bạn không hiểu sai ý mình đâu.Cảm ơn bạn nhé!
Còn một phần nữa là làm sao để mình chỉ cần click chuột vào 1 nút hoặc một chữ gì đó thì nó hiện ra sheet chứa ô đó chứ không phải vào: Tools/Macro/Sheet2.GetCPUID/Run nữa (Cái này có vẻ khó hơn).
Nhờ mọi người giúp đỡ.Thanks!
- Trước hết, bạn nên di chuyển Sub GetCPUID vào Module1, không nên để ở Sheet1 hoặc ThisWorkbook.
- Kế tiếp, bạn nhấn Alt+F8 --> chọn Sub GetCPUID, chọn Options và gán một tổ hợp phím tắt nào đó --> OK. Sau này, nếu muốn chạy code, bạn nhấn tổ hợp phím đã gán.
- Ngoài ra, bạn có thể vẽ một đối tượng gì đó --> click chuột phải trên đối tượng và chọn Assign Macro --> chọn Sub GetCPUID --> OK.
Bạn tham khảo trong file nhé.
 

File đính kèm

Upvote 0
Thêm một câu hỏi nữa nhờ mọi người giúp đỡ: Mình có thể gộp 3 đoạn code lấy serial của Mainboard, CPU, HDD vào một nút bấm không? Đây là file có chứa đoạn code đó nhưng chỉ hiển thị có mỗi serial của mainboard thôi. file mẫu View attachment CUPHDDMAIN.xls
Các bạn giúp mình nha!
 
Upvote 0
Thêm một câu hỏi nữa nhờ mọi người giúp đỡ: Mình có thể gộp 3 đoạn code lấy serial của Mainboard, CPU, HDD vào một nút bấm không? Đây là file có chứa đoạn code đó nhưng chỉ hiển thị có mỗi serial của mainboard thôi. file mẫu View attachment 61687
Các bạn giúp mình nha!
bạn thử gộp 3 đoạn code lại như thế này xem sao
PHP:
Sub GetBoardSerial()
Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set objs = WMI.ExecQuery("Select * from Win32_BaseBoard")
For Each obj In objs
Sheet1.[B1].Value = obj.SerialNumber
Next
 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
 Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
 For Each objItem In colItems
 Sheet1.[B2].Value = objItem.ProcessorId
 Next
     Dim fso As Object, Drv As Object
               Set fso = CreateObject("Scripting.FileSystemObject")
               Set Drv = fso.GetDrive(Environ("SystemDrive"))
              With Drv
                  If .IsReady Then
                      DriveSerial = Abs(.SerialNumber)
                  Else
                      DriveSerial = -1
                  End If
              End With
             
              Set Drv = Nothing
              Set fso = Nothing
              Sheet1.[B3].Value = DriveSerial
     End Sub
 
Upvote 0
bạn thử gộp 3 đoạn code lại như thế này xem sao
PHP:
Sub GetBoardSerial()
Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set objs = WMI.ExecQuery("Select * from Win32_BaseBoard")
For Each obj In objs
Sheet1.[B1].Value = obj.SerialNumber
Next
 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
 Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
 For Each objItem In colItems
 Sheet1.[B2].Value = objItem.ProcessorId
 Next
     Dim fso As Object, Drv As Object
               Set fso = CreateObject("Scripting.FileSystemObject")
               Set Drv = fso.GetDrive(Environ("SystemDrive"))
              With Drv
                  If .IsReady Then
                      DriveSerial = Abs(.SerialNumber)
                  Else
                      DriveSerial = -1
                  End If
              End With
             
              Set Drv = Nothing
              Set fso = Nothing
              Sheet1.[B3].Value = DriveSerial
     End Sub

Mình đã thử rồi, không được bạn ạ.
 
Upvote 0
Cảm ơn bạn nhé vậy là bài toán của mình đã được giải xong rồi.Cảm ơn mọi người rất nhiều!
 
Upvote 0
bạn thử gộp 3 đoạn code lại như thế này xem sao
PHP:
Sub GetBoardSerial()
Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set objs = WMI.ExecQuery("Select * from Win32_BaseBoard")
For Each obj In objs
Sheet1.[B1].Value = obj.SerialNumber
Next
 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
 Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
 For Each objItem In colItems
 Sheet1.[B2].Value = objItem.ProcessorId
 Next
     Dim fso As Object, Drv As Object
               Set fso = CreateObject("Scripting.FileSystemObject")
               Set Drv = fso.GetDrive(Environ("SystemDrive"))
              With Drv
                  If .IsReady Then
                      DriveSerial = Abs(.SerialNumber)
                  Else
                      DriveSerial = -1
                  End If
              End With
             
              Set Drv = Nothing
              Set fso = Nothing
              Sheet1.[B3].Value = DriveSerial
     End Sub
Lấy thông số của CPU, Mainboard và HDD là 3 chuyện khác nhau. Theo tôi không nên gộp chung lại thành 1 code ---> Nhìn nó kỳ kỳ sao ấy
Tốt nhất cứ để nguyên code cũ, tạo 1 sub mới và gọi 3 đoạn code trên
PHP:
Sub Main()
  GetBoardSerial
  GetCPUID
  readserienumber
End Sub
Nghĩ cũng lạ! Đại ca này viết code Pro quá chừng (xài toàn... hàng hiệu)... Vậy mà lại hỏi những thứ quá.. cơ bản (chẳng hiểu làm sao cả)
 
Upvote 0
hihi thời buổi này công nghệ phát triển như vũ bão nên mình nói với bạn là mình ko biết tí tẹo nào về VBA chắc bạn sẽ tin thôi. Tiện đây các bạn cho hỏi sao trên excel 2010 không chạy được file có macro mặc dù đã enable trong option rồi. Làm sao để mở menu Macro trong excel 2010 như trong 2003 và 2007?Bạn nào biết giúp mình với nhé. Thank!
 
Lần chỉnh sửa cuối:
Upvote 0
- Trước hết, bạn nên di chuyển Sub GetCPUID vào Module1, không nên để ở Sheet1 hoặc ThisWorkbook.
- Kế tiếp, bạn nhấn Alt+F8 --> chọn Sub GetCPUID, chọn Options và gán một tổ hợp phím tắt nào đó --> OK. Sau này, nếu muốn chạy code, bạn nhấn tổ hợp phím đã gán.
- Ngoài ra, bạn có thể vẽ một đối tượng gì đó --> click chuột phải trên đối tượng và chọn Assign Macro --> chọn Sub GetCPUID --> OK.
Bạn tham khảo trong file nhé.

Bạn cho mình hỏi có hàm nào giúp ta cập nhật lại thông số lấy từ hàm vừa rồi mỗi khi ta mở file đó ra không( Tức là nó sẽ tự động chạy hàm GetCPUID mỗi khi mình chạy file Excel). Thanks!!!
 
Upvote 0
Bạn cho mình hỏi có hàm nào giúp ta cập nhật lại thông số lấy từ hàm vừa rồi mỗi khi ta mở file đó ra không( Tức là nó sẽ tự động chạy hàm GetCPUID mỗi khi mình chạy file Excel). Thanks!!!
Thì bạn sửa Sub Thành Function đi... Gõ hàm vào cell, khỏi bấm nút
 
Upvote 0
Bạn có thể nói rõ hơn ko? Mình mù tịt vba mà! Giúp mình với nhé. Thanks
 
Upvote 0
Bạn có thể nói rõ hơn ko? Mình mù tịt vba mà! Giúp mình với nhé. Thanks
Trong code của bạn, chổ nào có chữ Sub thì sửa thành chữ Function... ghi thêm kết quả của Function
Ví dụ
- Code cũ của bạn:
Mã:
[COLOR=red][B]Sub[/B][/COLOR] readserienumber()
  Dim fso As Object, Drv As Object
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set Drv = fso.GetDrive(Environ("SystemDrive"))
  With Drv
    If .IsReady Then
      DriveSerial = Abs(.SerialNumber)
    Else
      DriveSerial = -1
    End If
  End With
  Set Drv = Nothing
  Set fso = Nothing
  [COLOR=red][B]Sheet1.[B3].Value[/B][/COLOR] = DriveSerial
End Sub
- Ta sẽ sửa thành:
Mã:
[COLOR=red][B]Funcion[/B][/COLOR] readserienumber()
  Dim fso As Object, Drv As Object
  [COLOR=red][B]Application.Volatile[/B][/COLOR]
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set Drv = fso.GetDrive(Environ("SystemDrive"))
  With Drv
    If .IsReady Then
      DriveSerial = Abs(.SerialNumber)
    Else
      DriveSerial = -1
    End If
  End With
  Set Drv = Nothing
  Set fso = Nothing
  [COLOR=red][B]readserienumber[/B][/COLOR] = DriveSerial
End Sub
Xong, tại cell B3, bạn chỉ cần gõ công thức =Readserienumber() là xong
Các code khác sửa tương tự
Tôi làm sẳn cho bạn trong file đính kèm đây... Nhân tiện rút gọn lại code.. nó lằng nhằng quá
PHP:
Function GetBoardSerial()
  Dim obj
  Application.Volatile
  With GetObject("winmgmts:\\.\root\cimv2")
    For Each obj In .ExecQuery("Select * from Win32_BaseBoard")
      GetBoardSerial = obj.SerialNumber
    Next
  End With
End Function
PHP:
Function GetCPUID()
  Dim objItem
  Application.Volatile
  With GetObject("winmgmts:\\.\root\cimv2")
    For Each objItem In .ExecQuery("Select * from Win32_Processor")
      GetCPUID = objItem.ProcessorId
    Next
  End With
End Function
PHP:
Function Readserienumber()
  Application.Volatile
  With CreateObject("Scripting.FileSystemObject")
    With .GetDrive(Environ("SystemDrive"))
      If .IsReady Then
        Readserienumber = Abs(.SerialNumber)
      Else
        Readserienumber = -1
      End If
    End With
  End With
End Function
------------------
Nói thêm: Bạn đừng giận chứ tôi thấy bạn học viết code theo kiểu "1 bước lên mây" thế này thì biết đến khi nào mới leo được tới... nóc nhà (chứ đừng nói là mây) ---> Học phải có căn bản từ thấp lên cao chứ
 

File đính kèm

Upvote 0
Bạn cho mình hỏi có hàm nào giúp ta cập nhật lại thông số lấy từ hàm vừa rồi mỗi khi ta mở file đó ra không( Tức là nó sẽ tự động chạy hàm GetCPUID mỗi khi mình chạy file Excel). Thanks!!!

Bạn tao Sub Auto_Open trong module
PHP:
Sub Auto_Open ()
  GetBoardSerial
  GetCPUID
  readserienumber
End Sub

-------------------------------
To ndu: Sao hàm Function GetBoardSerial không cho ra kết quả gì nhỉ. Có phải tại MainBoard của mình dỏm không?
 
Upvote 0
To ndu: Sao hàm Function GetBoardSerial không cho ra kết quả gì nhỉ. Có phải tại MainBoard của mình dỏm không?
Không cho ra kết quả? Vậy nó ra cái gì? Báo lỗi chăng? Anh thử bấm F9 thử xem có tác dụng gì không?
Hoặc down file này về chạy thử xem thế nào nhé
Hoặc trong code trên, chổ nào có chữ GetObject anh sửa thành CreateObject xem
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
+-+-+-+ +-+-+-+ +-+-+-+ Cũng chẳng biết là nguyên nhân gì nữa. Tuy nhiên anh cứ thử sửa thành vầy xem:
PHP:
Function GetBoardSerial()
  Dim obj
  Application.Volatile
  With GetObject("winmgmts:{impersonationLevel=impersonate}")
    For Each obj In .InstancesOf("Win32_BaseBoard")
      GetBoardSerial = obj.SerialNumber
    Next
  End With
End Function
Hoặc:
PHP:
Function GetBoardSerial()
  Dim obj
  Application.Volatile
  With GetObject("winmgmts:{impersonationLevel=impersonate}")
    For Each obj In .InstancesOf("Win32_BIOS")
      GetBoardSerial = obj.SerialNumber
    Next
  End With
End Function
Ah... mà anh dùng Windows gì nhỉ?
 
Lần chỉnh sửa cuối:
Upvote 0
Chiêu cuối của ndu:
ndu96081631;305324[php đã viết:
Function GetBoardSerial()
Dim obj
Application.Volatile
With GetObject("winmgmts:{impersonationLevel=impersonate}")
For Each obj In .InstancesOf("Win32_BIOS")
GetBoardSerial = obj.SerialNumber
Next
End With
End Function
[/php]Ah... mà anh dùng Windows gì nhỉ?

Trả về ba ký tự "OEM"
Là sao ndu? MainBoarn mình có gì khác?
Đây là Properties "Cục sắt" của mình, WinXP-SP3
 
Lần chỉnh sửa cuối:
Upvote 0
Đến đây thì em... thua, hổng biết gì ráo trọi

Thầy ơi tiếp đi Thầy!
Chắc là thời ấy trình của Thầy đang ở cấp độ "yêu đương Em GPE" nên kiến thư'c còn hơi Ẹc Ẹc ... :))))) . Còn giờ thì chắc khác nhiều Thầy nhỉ..Vì Thầy đã Úp Sọt và sở hữu được Em này rồi nhỉ... hahaha
Giờ Thầy có thể giúp con làm lại 1 cái file khác hoản hảo hơn được khộng ạ! Cảm ơn Thầy!
 
Upvote 0
Thầy ơi tiếp đi Thầy!
Chắc là thời ấy trình của Thầy đang ở cấp độ "yêu đương Em GPE" nên kiến thư'c còn hơi Ẹc Ẹc ... :))))) . Còn giờ thì chắc khác nhiều Thầy nhỉ..Vì Thầy đã Úp Sọt và sở hữu được Em này rồi nhỉ... hahaha
Giờ Thầy có thể giúp con làm lại 1 cái file khác hoản hảo hơn được khộng ạ! Cảm ơn Thầy!

Thế code trong file ở bài 17 thì sao?
 
Upvote 0
nó như bài #21 Thầy ThanhLanh đã viết Thầy ạ!
untitled.JPG

Mà nếu máy có 2 ổ cứng trở nên thì Cái HDD là Ổ cứng nào vậy Thầy.
Có phải là cái Ổ chứa cái file Excel đang mở không hả Thầy? Hay nó là ổ Win vậy ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Thế còn code này thì sao:
Mã:
Function GetBoardSerial()
  Dim obj
  Application.Volatile
  With CreateObject("winmgmts:{impersonationLevel=impersonate}")
    For Each obj In .InstancesOf("Win32_BIOS")
      GetBoardSerial = obj.SerialNumber
    Next
  End With
End Function

không biết con làm có đúng không mà nó lại báo lỗi thế này
untitled2.JPG
Thầy xem giúp ạ!
 
Upvote 0
à mà không phải vẫn hiện tượng lỗi giống bài #29 Thầy ạ!
2.JPG
 
Upvote 0
Thế còn code này thì sao:
Mã:
Function GetBoardSerial()
  Dim obj
  Application.Volatile
  With CreateObject("winmgmts:{impersonationLevel=impersonate}")
    For Each obj In .InstancesOf("Win32_BIOS")
      GetBoardSerial = obj.SerialNumber
    Next
  End With
End Function
Hôm nay tôi đọc bài này và cũng thử kiểm tra trên máy của mình thì nó cũng chẳng có thông tin gì về main cả? tại sao nhỉ?( main của tôi là giga 31) Bác Du có thể xem nguyên nhân là ở code hay tại main không?.
Nhân tiện Bác Du cho em hỏi có cách nào dựa vào những thông số này để mình tạo cho 1 file excel chỉ sử dụng trên một máy nếu copy sang máy khác khi mở lên là nó kill luôn không?
 
Lần chỉnh sửa cuối:
Upvote 0
Ở máy tính em Test thấy bình thường
Máy tính của em là Laptop Asus
Sử dụng Win 7 32 Bit Excel 2010
 

File đính kèm

  • Thong so may.png
    Thong so may.png
    3.3 KB · Đọc: 98
Upvote 0
hôm nay tôi đọc bài này và cũng thử kiểm tra trên máy của mình thì nó cũng chẳng có thông tin gì về main cả? Tại sao nhỉ?( main của tôi là giga 31) bác du có thể xem nguyên nhân là ở code hay tại main không?.
Nhân tiện bác du cho em hỏi có cách nào dựa vào những thông số này để mình tạo cho 1 file excel chỉ sử dụng trên một máy nếu copy sang máy khác khi mở lên là nó kill luôn không?

eo ôi,,, khiếp...có thể như vậy được không mà hỏi dữ vậy anh?? @@!
 
Upvote 0
à mà không phải vẫn hiện tượng lỗi giống bài #29 Thầy ạ!

Bây giờ bạn kiểm tra bằng tay thế này nhé:
- Bấm tổ hợp phím Lá cờ Windows + R và gõ vào dòng lệnh: cmd rồi Enter
- Trong cửa sổ cmd vừa mở, bạn gõ dòng lệnh này vào: wmic bios get serialnumber rồi Enter
Xem thử nó ra cái gì? Chụp hình kết quả gửi lên tôi xem nhé
Nếu công đoạn kiểm tra bằng tay này thành công thì tôi sẽ có cách viết code (dựa vào dòng lệnh trên). Bằng ngược lại thì.. ngu luôn
 
Upvote 0
Bây giờ bạn kiểm tra bằng tay thế này nhé:
- Bấm tổ hợp phím Lá cờ Windows + R và gõ vào dòng lệnh: cmd rồi Enter
- Trong cửa sổ cmd vừa mở, bạn gõ dòng lệnh này vào: wmic bios get serialnumber rồi Enter
Xem thử nó ra cái gì? Chụp hình kết quả gửi lên tôi xem nhé
Nếu công đoạn kiểm tra bằng tay này thành công thì tôi sẽ có cách viết code (dựa vào dòng lệnh trên). Bằng ngược lại thì.. ngu luôn

Thầy ơi!!! Gõ lệnh trên thê nào đây ... huhuh ;;;;;;;;;;;;;;;;;;;;;;+-+-+-++-+-+-+

[video=youtube;vYVKLIQQDTE]http://www.youtube.com/watch?v=vYVKLIQQDTE&feature=youtu.be[/video]


con đã gõ rồi không ra kết quả... ~^^~
 
Lần chỉnh sửa cuối:
Upvote 0
Hôm nay tôi đọc bài này và cũng thử kiểm tra trên máy của mình thì nó cũng chẳng có thông tin gì về main cả? tại sao nhỉ?( main của tôi là giga 31) Bác Du có thể xem nguyên nhân là ở code hay tại main không?.
Nhân tiện Bác Du cho em hỏi có cách nào dựa vào những thông số này để mình tạo cho 1 file excel chỉ sử dụng trên một máy nếu copy sang máy khác khi mở lên là nó kill luôn không?

Tôi đã làm từ lâu rồi, share trên diễn đàn GPE rồi, pm bán được tiền cơ! Bạn hãy tỏ trình độ mình đã rồi hãy tính nhé... Ghét nhất những ai suốt ngày vào hỏi giấu giếm này nọ!!
 
Upvote 0
Tôi đã làm từ lâu rồi, share trên diễn đàn GPE rồi, pm bán được tiền cơ! Bạn hãy tỏ trình độ mình đã rồi hãy tính nhé... Ghét nhất những ai suốt ngày vào hỏi giấu giếm này nọ!!
Thầy ơi! Bình tĩnh ạ! Công nhận trên diễn đàn thì vấn đề bảo mật là quá tầm thường.
Nhưng đôi khi ở cty hay 1 doanh nghiệp nào đó thì mình cũng có những cái riêng tư của một mảng nhất định nào đó Thầy ạ!
Ví dụ file tính lương của bộ phận kế toán hay nhân sự chẳng hạn em cũng muốn có ý tưởng chỉ mở trong được 1 số máy của bộ phận này hoặc bộ phận kia thôi còn máy khác sớ rớ vào thì die luôn.
Cái này mình chống người ngay thôi Thầy ạ! Chứ chống cao thủ thì ... @@ chắc chịu... nhất là gặp phải GPE chưa đầy 3S...
-------
Theo Em việc học hỏi trao đổi cũng có nhiều mục đích do vậy mong Thầy bớt giận ạ...
Hix hôm nay Em mới sờ đến thông tin của CPU đấy chứ bình thường em có biết và quan tâm gì đâu... hihi
 
Upvote 0
Thầy ơi! Bình tĩnh ạ! Công nhận trên diễn đàn thì vấn đề bảo mật là quá tầm thường.
Nhưng đôi khi ở cty hay 1 doanh nghiệp nào đó thì mình cũng có những cái riêng tư của một mảng nhất định nào đó Thầy ạ!
Ví dụ file tính lương của bộ phận kế toán hay nhân sự chẳng hạn em cũng muốn có ý tưởng chỉ mở trong được 1 số máy của bộ phận này hoặc bộ phận kia thôi còn máy khác sớ rớ vào thì die luôn.
Cái này mình chống người ngay thôi Thầy ạ! Chứ chống cao thủ thì ... @@ chắc chịu... nhất là gặp phải GPE chưa đầy 3S...
-------
Theo Em việc học hỏi trao đổi cũng có nhiều mục đích do vậy mong Thầy bớt giận ạ...
Hix hôm nay Em mới sờ đến thông tin của CPU đấy chứ bình thường em có biết và quan tâm gì đâu... hihi

Miễn Thầy Trò ở đây nhé! Vấn đề này đã bàn ở GPE nhiều lần rồi!!

PS: Gần đây tôi không còn hào hứng trả lời vì những thành viên ảo, suốt ngày vào chỉ nhờ vả! Trình độ thì có hạn mà chỉ tính giấu giếm
 
Upvote 0
Bây giờ bạn kiểm tra bằng tay thế này nhé:
- Bấm tổ hợp phím Lá cờ Windows + R và gõ vào dòng lệnh: cmd rồi Enter
- Trong cửa sổ cmd vừa mở, bạn gõ dòng lệnh này vào: wmic bios get serialnumber rồi Enter
Xem thử nó ra cái gì? Chụp hình kết quả gửi lên tôi xem nhé
Nếu công đoạn kiểm tra bằng tay này thành công thì tôi sẽ có cách viết code (dựa vào dòng lệnh trên). Bằng ngược lại thì.. ngu luôn
Đây rồi! Bác Du xem hộ
clip_image002.jpg
 
Upvote 0
Bây giờ bạn kiểm tra bằng tay thế này nhé:
- Bấm tổ hợp phím Lá cờ Windows + R và gõ vào dòng lệnh: cmd rồi Enter
- Trong cửa sổ cmd vừa mở, bạn gõ dòng lệnh này vào: wmic bios get serialnumber rồi Enter
Xem thử nó ra cái gì? Chụp hình kết quả gửi lên tôi xem nhé
Nếu công đoạn kiểm tra bằng tay này thành công thì tôi sẽ có cách viết code (dựa vào dòng lệnh trên). Bằng ngược lại thì.. ngu luôn
Em gửi hình nhưng không được Bác Du thông cảm.
Em thử dòng lênh trên của bác cũng không đươc nó chỉ hiện dưới dòng lệnh mình gõ vào là "serialnumber"
 
Lần chỉnh sửa cuối:
Upvote 0
Miễn Thầy Trò ở đây nhé! Vấn đề này đã bàn ở GPE nhiều lần rồi!!

Thầy ạ! Có lẽ Kumi không có duyên được đọc những bài mà Thầy đã nêu ởi trên rồi.
Riêng với Kumi cũng phải xét theo từng trường hợp mới dám xưng hô.
Nếu cấp độ từ 1 sao vàng không xoay trở lên mà có nhiều đóng góp cho GPE thì Kumi không ngại gọi là Thầy Cô mặc dù không biết tuổi tác ra sao.
Hơn nữa với các Mod hay BQT là những người được chọn trong hàng chục nghìn người... thì lại càng là những người truyền giáo tốt nhất,luôn nỗ lực tìm cách đem lại nhiều kiến thức thật bổ ích cho cộng đồng GPE chẳng nhẽ không đáng để được gọi là Thầy sao ạ!
Còn ngoài ra cũng phải qua những bài viết của họ và cách xưng hô của các thành viên trong GPE về họ thì Kumi mới có thể xưng hô.
Còn lại luôn là Anh là Chị!
----------------
Cảm ơn Thầy!
 
Upvote 0
Tôi đã làm từ lâu rồi, share trên diễn đàn GPE rồi, pm bán được tiền cơ! Bạn hãy tỏ trình độ mình đã rồi hãy tính nhé... Ghét nhất những ai suốt ngày vào hỏi giấu giếm này nọ!!
Tôi chẳng biết "PhanTuHuong" nghĩ như thế nào về câu hỏi của tôi mà lại nói như vậy!
Chẳng là tôi cũng rất thích về VBA nhưng tôi không học qua trường lớp nào cả mà chỉ là tự học tự tìm tòi thôi, chính vì vậy tôi mới hỏi để biêt chứ tôi có giấu gì đâu.
 
Upvote 0
Nếu bạn thanh tong và KUMI không đọc được SerialNumber thì sửa code của ndu

Mã:
Function GetBoardSerial()
  Dim obj
  Application.Volatile
  With CreateObject("winmgmts:{impersonationLevel=impersonate}")
    For Each obj In .InstancesOf("Win32_BIOS")
      GetBoardSerial = obj.[B][COLOR=#ff0000]SerialNumber[/COLOR][/B]
    Next
  End With
End Function

thành

Mã:
Function GetBoardSerial()
  Dim obj
  Application.Volatile
  With CreateObject("winmgmts:{impersonationLevel=impersonate}")
    For Each obj In .InstancesOf("Win32_BIOS")
      GetBoardSerial = obj.[B][COLOR=#ff0000]Name[/COLOR][/B]    ' hoac obj.[B][COLOR=#ff0000]Caption[/COLOR][/B]
    Next
  End With
End Function
-------------
Nếu ai muốn xem "trong trái ổi có thứ gì" thì chạy code sau. Tôi mới viết và test qua loa nên không biết đã chuẩn chưa. Nếu ai thích "voc" thì xin mời tham chiếu tới Microsoft WMI Scripting V1.2 Library và vọc nhé. Tôi phủi tay.

Tôi chọn Name (hoặc Caption, hoặc ...) cũng là do đã chạy code và xem xong "trong trái ổi có thứ gì"

Mã:
Private Const wbemFlagUseAmendedQualifiers = &H20000

Function GetObjectProp(ByVal Win32ClassName As String)
Dim service As Object, obj As Object, WbemLocator As Object, objItem As Object, instance As Object
Dim Arr, r As Long, c As Long, prop
On Error Resume Next
    Set WbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set service = WbemLocator.ConnectServer(".", "root\CIMV2")
    If Not service Is Nothing Then
        Set obj = service.Get(Win32ClassName, wbemFlagUseAmendedQualifiers, Nothing)
        If Not obj Is Nothing Then
            ReDim Arr(0 To obj.Instances_.Count, 1 To 1)
            For Each instance In obj.Instances_
                If r = 0 Then ReDim Preserve Arr(0 To obj.Instances_.Count, 1 To instance.Properties_.Count)
                r = r + 1
                c = 0
                For Each objItem In instance.Properties_
                    c = c + 1
                    Arr(0, c) = objItem.Name
                    Arr(r, c) = objItem.Value
                Next objItem
            Next instance
            GetObjectProp = Arr
        End If
    End If
End Function

Sub test()
Dim Arr
    Sheet1.UsedRange.ClearContents
    Arr = GetObjectProp("Win32_Bios")
    If IsArray(Arr) Then Range("A1").Resize(UBound(Arr) + 1, UBound(Arr, 2)).Value = Arr
End Sub

Các giá trị cho Win32ClassName:

Mã:
Win32_PhysicalMemory
Win32_Processor
[B][COLOR=#ff0000]Win32_Bios[/COLOR][/B]
Win32_VideoController
Win32_SoundDevice
Win32_ComputerSystem
Win32_Process
Win32_OperatingSystem
Win32_Group
Win32_CDROMDrive
Win32_PnPEntity
Win32_PointingDevice
Win32_SystemEnclosure
Win32_USBHub
Win32_Product
Win32_LocalTime
Win32_TimeZone
Win32_Desktop
Win32_DesktopMonitor
Win32_StartupCommand
Win32_LogicalDisk
Win32_NTEventLogFile
Win32_NetworkAdapterConfiguration
Win32_Printer
Win32_Service
Win32_DiskDrive
Win32_DiskPartition
Win32_DiskDriveToDiskPartition
WIN32_BaseBoard
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Thầy siwtom ,Con đã thầy có kết quả hiển thị.
nhưng con cũng không biết kết quả có đúng như thế này không ạ!

untitled.JPG

-----------------
Xin hỏi thên Thầy Cô và Anh Chị trong GPE, Em muốn kiểm tra lại các thông tin hiển thị trong file là đúng hay sai thì phải lấy thông tin ở đâu để so sánh ạ!
Nếu máy tính lắp 2 ổ cứng trở lên thì Cái seria của HDD trong hình ảnh đính kèm là của ổ lưu file hay là ổ window ạ!
Xin cảm ơn!
 
Upvote 0
Cảm ơn SiwTom!
Tôi thử code của anh thì có thấy sr của main rồi OK
 
Upvote 0
Cảm ơn Thầy siwtom ,Con đã thầy có kết quả hiển thị.
nhưng con cũng không biết kết quả có đúng như thế này không ạ!

View attachment 104879

-----------------
Xin hỏi thên Thầy Cô và Anh Chị trong GPE, Em muốn kiểm tra lại các thông tin hiển thị trong file là đúng hay sai thì phải lấy thông tin ở đâu để so sánh ạ!
Nếu máy tính lắp 2 ổ cứng trở lên thì Cái seria của HDD trong hình ảnh đính kèm là của ổ lưu file hay là ổ window ạ!
Xin cảm ơn!

Cái số HDD mà bạn đọc ra đó (Readserienumber) không phải là số unique của đĩa cứng vật lý.
Cái số đó là Label của đĩa lôgíc / phân vùng. Ở trường hợp này ắt là Label của "đĩa" C.

Bạn có 1 đĩa vật lý mua từ cửa hàng về nhưng bạn chia thành 3 đĩa / 3 phân vùng C, D, E thì mỗi "đĩa" C, D, E có 1 Label và những Label này thì mỗi lần Format phân vùng thì bác Bill lại cho 1 số khác.

Cái số bất di bất dịch và luôn đặc trưng cho đĩa cứng vật lý thì phải đọc bằng hàm khác. Bạn tự tìm trên GPE.

Nếu bạn muốn xem code của tôi thì bạn gọi hàm (bài #46) với tham số là "Win32_PhysicalMedia". Bạn có bao nhiêu đĩa cứng vật lý thì nó ra hết.
 
Upvote 0
Cái số HDD mà bạn đọc ra đó (Readserienumber) không phải là số unique của đĩa cứng vật lý.
Cái số đó là Label của đĩa lôgíc / phân vùng. Ở trường hợp này ắt là Label của "đĩa" C.

Bạn có 1 đĩa vật lý mua từ cửa hàng về nhưng bạn chia thành 3 đĩa / 3 phân vùng C, D, E thì mỗi "đĩa" C, D, E có 1 Label và những Label này thì mỗi lần Format phân vùng thì bác Bill lại cho 1 số khác.

Cái số bất di bất dịch và luôn đặc trưng cho đĩa cứng vật lý thì phải đọc bằng hàm khác. Bạn tự tìm trên GPE.

Nếu bạn muốn xem code của tôi thì bạn gọi hàm (bài #46) với tham số là "Win32_PhysicalMedia". Bạn có bao nhiêu đĩa cứng vật lý thì nó ra hết.

Các anh cho em hỏi với: với đoạn code trên thì nếu máy có 2 ID CPU thì nó sẽ báo 2 lần ID CPU vậy giờ em muốn lấy 1 lần thôi thì sửa code thế nào? Em hỏi thêm tý nữa, vì sao khi ghost máy thì nó báo có 2 ID CPU còn khi cài thủ công thì nó chỉ báo có 1 ID CPU
 
Upvote 0
Miễn Thầy Trò ở đây nhé! Vấn đề này đã bàn ở GPE nhiều lần rồi!!

PS: Gần đây tôi không còn hào hứng trả lời vì những thành viên ảo, suốt ngày vào chỉ nhờ vả! Trình độ thì có hạn mà chỉ tính giấu giếm
Trình độ thì có hạn mà chỉ tính giấu giếm
 
Lần chỉnh sửa cuối:
Upvote 0
bạn thử gộp 3 đoạn code lại như thế này xem sao
PHP:
Sub GetBoardSerial()
Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set objs = WMI.ExecQuery("Select * from Win32_BaseBoard")
For Each obj In objs
Sheet1.[B1].Value = obj.SerialNumber
Next
 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
 Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
 For Each objItem In colItems
 Sheet1.[B2].Value = objItem.ProcessorId
 Next
     Dim fso As Object, Drv As Object
               Set fso = CreateObject("Scripting.FileSystemObject")
               Set Drv = fso.GetDrive(Environ("SystemDrive"))
              With Drv
                  If .IsReady Then
                      DriveSerial = Abs(.SerialNumber)
                  Else
                      DriveSerial = -1
                  End If
              End With
             
              Set Drv = Nothing
              Set fso = Nothing
              Sheet1.[B3].Value = DriveSerial
     End Sub
Nếu muốn xuất thời gian tại thời điểm lấy thông tin CPu vào ô B4 thì phải làm như thế nào bạn?
Tks
 
Upvote 0
Nếu muốn xuất thời gian tại thời điểm lấy thông tin CPu vào ô B4 thì phải làm như thế nào bạn?
Tks
bạn insert thêm hàm now phía dưới code nhé
đại khái nó như thế này:
PHP:
Sub GetBoardSerial()
Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set objs = WMI.ExecQuery("Select * from Win32_BaseBoard")
For Each obj In objs
Sheet1.[B1].Value = obj.SerialNumber
Next
 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
 Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
 For Each objItem In colItems
 Sheet1.[B2].Value = objItem.ProcessorId
 Next
     Dim fso As Object, Drv As Object
               Set fso = CreateObject("Scripting.FileSystemObject")
               Set Drv = fso.GetDrive(Environ("SystemDrive"))
              With Drv
                  If .IsReady Then
                      DriveSerial = Abs(.SerialNumber)
                  Else
                      DriveSerial = -1
                  End If
              End With
             
              Set Drv = Nothing
              Set fso = Nothing
              Sheet1.[B3].Value = DriveSerial
              Sheet1.[B4].Value = Now()
     End Sub
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom