我设计的Excel文件中有VBA代码,已使用4年,无问题,最近一保存,就显示“该部件的许可证信息没有找到。在设计环境中,你没有合适的许可使用该功能。”,点击两次确定后,显示“文件为保存”,无法保存文件。
我查看VBA编辑器,有一个表单,可能与使用“Comdlg32.ocx”控件有关,点中该表单,就出现上面的错误信息。该控件已经执行“Regsvr32 Comdlg32.ocx”运行过。最近总出问题?如何解决?
我查看VBA编辑器,有一个表单,可能与使用“Comdlg32.ocx”控件有关,点中该表单,就出现上面的错误信息。该控件已经执行“Regsvr32 Comdlg32.ocx”运行过。最近总出问题?如何解决?
另外没见你使用该控件的代码,对这个控件来说,可以用DLL文件代替,需要用到API
lStructSize As Long '结构大小
hwndOwner As Long '
hInstance As Long '
strFilter As String '过滤器字符串
strCustomFilter As String '选中的过滤器(过滤器索引所指的过滤器)字符串
nMaxCustFilter As Long '过滤器最大长度
nFilterIndex As Long '选中的过滤器索引,意义与 CommonDialog 控件相同
strFile As String '选中的全路径文件名
nMaxFile As Long '装载全路径文件名的字符串长度
strFileTitle As String '去掉了路径的文件名
nMaxFileTitle As Long '装载去掉了路径的文件名字符串长度
strInitialDir As String '去掉了文件名的路径(没有最后的反斜杠)
strTitle As String '对话框标题,意义与 CommonDialog 控件相同
flags As Long '标志,意义与 CommonDialog 控件相同
nFileOffset As Integer '路径长度(包括最后的反斜杠)
nFileExtension As Integer '全路径文件名长度(不计算前面 3 个表示盘符的字符,如 D:)
strDefExt As String '默认提取
lCustData As Long '
lpfnHook As Long '勾子函数地址
lpTemplateName As String '
End TypePrivate Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (ofn As tagOPENFILENAME) As Boolean
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (ofn As tagOPENFILENAME) As Boolean
'返回选择的文件名。输入参数:
'1.对话框类型(0=保存,1=打开);2.对话框标题;3.过滤器字符串
'4.过滤器索引;5.标志;6.路径;7.文件名
Private Function CmdDlg(Optional ByVal DlgType As Boolean = True, _
Optional ByVal DialogTitle As String, Optional ByVal Filter As String, _
Optional FilterIndex As Long = 1, Optional flags As Long, _
Optional ByVal InitialDir As String, Optional ByVal FileName As String, Optional ByRef hWnd As Long = 0) As String
On Error GoTo CmdDlg_Error
Dim ofn As tagOPENFILENAME
Dim fResult As Boolean
If InitialDir = "" Then InitialDir = CurDir
If Len(Filter) > 0 Then Filter = Replace(Filter, "|", vbNullChar) 'Filter以Chr(0)为分隔符With ofn
.lStructSize = Len(ofn)
.hwndOwner = hWnd '0为屏幕句柄
.strFilter = Filter
.nFilterIndex = FilterIndex
.strFile = Left(FileName & String$(255, 0), 255) '用空字符补足全路径文件名255字节
.nMaxFile = 255 '全路径文件名长度
.strFileTitle = String$(255, 0) '用空字符填充(去掉路径的)文件名
.nMaxFileTitle = 255 '(去掉路径的)文件名长度
.strTitle = DialogTitle '对话框标题
.flags = flags
.strDefExt = ""
.strInitialDir = InitialDir
.hInstance = 0
.strCustomFilter = String(255, 0) '用空字符填充选中的过滤器
.nMaxCustFilter = 255 '选中的过滤器长度
.lpfnHook = 0
End With
If DlgType Then fResult = GetOpenFileName(ofn) Else fResult = GetSaveFileName(ofn)
If fResult Then
CmdDlg = Left(ofn.strFile, InStr(ofn.strFile, vbNullChar) - 1)
'FilterIndex = ofn.nFilterIndex '返回选中的过滤器索引
Else
CmdDlg = vbNullChar
End If
CmdDlg_Error:
End Function
Private Sub Command1_Click()
CmdDlg True, "打开", "*.txt", 1, 0, "C:\"
End Sub
左下角点开始,然后点运行,然后输入 regsvr32 "Comdlg32.ocx所在的全路径包括文件名"
该文件复制到其他电脑可以正常运行。
以启用宏打开该文件,进入VBA编辑器,点击包含“Comdlg32.ocx”控件的表单,就显示“该部件的许可证信息没有找到。在设计环境中,你没有合适的许可使用该功能”。
以禁用宏打开该文件,点击包含“Comdlg32.ocx”控件的表单,可以正常显示该表单及Comdlg32.ocx控件。删除该控件,运行新的控件(regsvr32 Comdlg32.ocx),再向该表单添加该控件,保存后文件后,再打开该文件,都正常,然后再保存后打开该文件,就不能保存了,显示“该部件的许可证信息没有找到”等。
该问题以前使用3、4年,从来没有出问题,就去年和今年部分电脑出现该问题,是否与目前新的操作系统或者新的office有关?
REGEDIT4
[HKEY_CLASSES_ROOT\.ocx]
@="ocxfile"
[HKEY_CLASSES_ROOT\ocxfile]
@=”OCX”
[HKEY_CLASSES_ROOT\ocxfile\shell\Register\command]
@="RegSvr32 \"%1\""
[HKEY_CLASSES_ROOT\ocxfile\shell\Unregister\command]
@="RegSvr32 /u \"%1\""
REGEDIT4
[HKEY_CLASSES_ROOT\.dll]
@="dllfile"
[HKEY_CLASSES_ROOT\dllfile]
@=”DLL”
[HKEY_CLASSES_ROOT\dllfile\shell\Register\command]
@="RegSvr32 \"%1\""
[HKEY_CLASSES_ROOT\dllfile\shell\Unregister\command]
@="RegSvr32 /u \"%1\""
上面的文本是注册ocx和dll用的,不用去记忆那些繁琐的DOS命令格式