如何确定VBA后期绑定的类名字符串?解决跨机器运行失败问题
如何找到VBA后期绑定的正确类名(ProgID)
方法一:从早期绑定实例直接读取ProgID(最靠谱)
既然同事机器上早期绑定代码能正常运行,直接在他的Excel里运行这段代码,就能拿到准确的ProgID:
Dim oThisType As ThisType Set oThisType = New ThisType ' 尝试直接读取对象的ProgID属性(大部分组件支持) MsgBox "该对象的ProgID:" & oThisType.ProgID ' 如果上面的代码报错,用这个备用方法: MsgBox "该对象的ProgID:" & CreateObject("Scriptlet.TypeLib").GUIDToProgID(ObjPtr(oThisType))
运行后弹窗里的字符串,就是你要的"ClassNameString"。
方法二:从注册表查找ProgID
如果方法一不行,手动去注册表找对应的项:
- 按
Win+R输入regedit打开注册表编辑器 - 定位到
HKEY_CLASSES_ROOT,搜索ThisType(早期绑定用的类名),找到对应的CLSID项(比如HKEY_CLASSES_ROOT\ThisType\CLSID,默认值是一串类似{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}的ID) - 复制这个CLSID,定位到
HKEY_CLASSES_ROOT\CLSID\{刚才复制的CLSID}\ProgID,这里的默认值就是后期绑定要用的ProgID字符串 - 也可以直接在
HKEY_CLASSES_ROOT下搜索包含组件名称的ProgID项,逐一验证
方法三:验证找到的ProgID
拿到字符串后,在同事机器上用这段代码测试:
Dim oTest As Object On Error Resume Next Set oTest = CreateObject("这里替换成找到的ProgID") If Err.Number = 0 Then MsgBox "后期绑定成功!" Else MsgBox "绑定失败:" & Err.Description End If On Error GoTo 0
注意事项
- 不要盲目试
"xxx.1"这类带版本号的格式,只有组件确实注册了版本化的ProgID时才有用,大部分情况直接用不带版本的ProgID即可 - 早期绑定能运行说明组件已正确注册,从对象实例读取ProgID是最准确的方式,比注册表查找更不容易出错
内容的提问来源于stack exchange,提问作者LorneCash
相关产品推荐
相关产品推荐

