函数HdNum()正在创建DLL的错误

时间:2018-02-07 11:52:04

标签: excel vba excel-vba

我找到了一个VBA EXCEL的功能,它以十六进制格式提供了My System的HardDrive序列号。

好的,我的系统上有活动的Microsoft Excel 16.0对象库。

当我在朋友的系统上运行相同的代码时,我收到错误

  

加载DLL时出错

在检查他的系统引用时,我发现他有Active Microsoft Excel 12.0对象库。这是晚期绑定和早期绑定的明显案例? (我以为......!)

这是我从随机论坛获得的函数代码,

Function HdNum() As String

    Dim fsObj   As Object

    Dim drv  As Object

    Set fsObj = CreateObject("Scripting.FileSystemObject")

    Set drv = fsObj.Drives("C")

    HdNum = VBA.Hex(drv.serialnumber)

End Function
你可以指导我实际上是什么问题吗?

1 个答案:

答案 0 :(得分:1)

无论如何,我得到了解决这个问题的方法。

我遇到的问题是因为我的朋友安装了64位版本的MS Office。并且我们都知道VB7中的编码有何不同,这与64位版本的MS Office有关。

下面我将为此工具提供代码以生成HardDisk序列号。从任何版本的Office。

在模块中粘贴以下代码

#If VBA7 Then
Private Declare PtrSafe Function GetVolumeInformation Lib _
"kernel32.dll" Alias "GetVolumeInformationA" _
(ByVal lpRootPathName As String, _
ByVal lpVolumeNameBuffer As String, _
ByVal nVolumeNameSize As Integer, _
lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, _
ByVal lpFileSystemNameBuffer As String, _
ByVal nFileSystemNameSize As Long) As Long
#Else
Private Declare Function GetVolumeInformation Lib _
"kernel32.dll" Alias "GetVolumeInformationA" _
(ByVal lpRootPathName As String, _
ByVal lpVolumeNameBuffer As String, _
ByVal nVolumeNameSize As Integer, _
lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, _
ByVal lpFileSystemNameBuffer As String, _
ByVal nFileSystemNameSize As Long) As Long
#End If

Public Function DriveSerialNumber(ByVal Drive As String) As Long

Dim lAns As Long
Dim lRet As Long
Dim sVolumeName As String, sDriveType As String
Dim sDrive As String

sDrive = Drive
If Len(sDrive) = 1 Then
    sDrive = sDrive & ":\"
ElseIf Len(sDrive) = 2 And Right(sDrive, 1) = ":" Then
    sDrive = sDrive & "\"
End If

sVolumeName = VBA.String$(255, Chr$(0))
sDriveType = VBA.String$(255, Chr$(0))
lRet = GetVolumeInformation(sDrive, sVolumeName, 255, lAns, 0, 0, sDriveType, 255)
DriveSerialNumber = lAns

End Function

Function HdNum() As String
    HdNum = VBA.Hex(DriveSerialNumber("C:\"))
End Function

Sub HD()
    MsgBox HdNum
End Sub

谢谢你们。