Excel VBA“找不到工程或库”错误解决
前不久用Excel VBA给采购部做了个“供销存管理系统”,结果在采购部的电脑上运行出现“找不到工程或库”的错误,一般情况下,出现此错误是因为找不到引用工程,或找不到与工程语言对应的引用的对象库,还有就是安装Office精简版也会出现此类错误,解决方法:1、在VBE窗口中选择出错的VBA工程,快捷键:ALT+F11
2、在【工具】【引用】打开引用对话框
3、查找带勾项中含“丢失…”、“找不到…”、“MISSING…”的条目,并取消勾选!
4、一般情况下,用第3步即可解决,如问题依旧,请在“可用的引用”中查找并勾选与丢失的条目类似的引用(一般除版本号不同,其它名称相同,如有多个版本,请选择最高版本)
如果还不能解决,可能是电脑中缺少控件或对象库,需要下载控件并注册,后返回上面步骤解决!
——————————————————————————–
参考内置帮助文件:
在解决丢失引用的问题前,不能运行代码。这个错误的起因与解决方法如下所示:
- 找不到引用工程,或找不到与工程语言对应的引用的对象库。
请在“引用”对话框中将没有解决的引用加上 MISSING 前缀。选取丢失的引用,以显示丢失的工程或对象库的路径或语言。以下是解决此问题的步骤:
解决引用的步骤
- 显示“引用”对话框。
- 选取丢失的引用。
- 激活对象浏览器。
- 使用“浏览”对话框以找寻丢失的引用。
- 单击“确定”。
- 重复以上步骤,执行解决所有丢失的引用为止。
当您找到一个丢失的项目时,MISSING 前缀就会删除,表示链接已重新建立。若引用的工程名已经改变,就会添加新的引用,并旧的引用必须删除。 要删除那些不必要的引用,只需清除不要的引用的复选框即可。请注意,对于 Visual Basic 对象库与主应用程序对象库的引用是不能删除的. 应用程序可以支持其对象库的不同语言版本。要了解所需的语言版本,可单击该引用,选取在对话框下方指出的语言。对象库可以是扩展名为 .OLB 的独立文件,或者集成在动态链接库 (DLL)中。在每一个平台上,对象库存在不同的版本。因此,当工程被移植到另一个平台上时,例如从 Macintosh 到 Microsoft Windows,那个平台的被引用库的正确语言版本,必须在主应用程序文档所指定的位置上可用。
对象库的文件名通常以下面的方式命名:
- Windows(3.1 版与更早):应用程序代码 + 语言代码 + [版本].OLB。例如:
法文的 Visual Basic for applications,Version 2 的对象库为 VAFR2.OLB。
法文的 Microsoft Excel 5.0 的对象库为 XLFR50.OLB。 - Macintosh:应用程序名代码+ [版本]. +OLB。例如:
法文的 Visual Basic for applications,Version 2 的对象库为 VA FR 2 OLB。
会是法文的 Microsoft Excel 5.0 的对象库为 MS Excel FR 50 OLB。
假如不能在系统上找到丢失的工程或库,可接洽引用工程的作者。若丢失的库是一个 Microsoft 应用程序的对象库,可用下面的方式取得:
- 假如您有 Microsoft electronic technical support services 的访问权,请参阅此帮助文件的技术支持一节。在电子服务下,将会发现如何使用适当的服务选项的介绍。
- 假如没有 Microsoft electronic technical support services 的访问权,可参考此 Microsoft 对象库所在之应用程序的注意。关于如何接触您当地的 Microsoft 产品支持组织的信息,也能够在这个帮助文件的技术支持一节中找到。

我也出现了这个问题,按照你的方法执行了,可是‘引用’按键是灰色的,无法使用怎么办?
@mqzln
确认工程是否设置了密码,是否设置了“以跟踪和修订方式共享”等,如果这样引用按钮会呈灰色不可用。
已经解决了,先点 “运算-重新设置”, 再点 “工具” ,这时的 “引用项” 就是可用的了,呵呵
你好。我按照您的方法解决了一个丢失。第二给丢失无法取消勾选,我下载了日历控件安装后OK了。但是又出现了“运行时错误:‘424’要求对象”,代码是
Private Sub Calendar1_Click()
ActiveCell = Calendar1.Value
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
Calendar1.Visible = True
Calendar1.Top = Range(“a1″, ActiveCell).Height
Calendar1.Left = Range(“a1″, ActiveCell).Width
Else
Calendar1.Visible = False
End If
End Sub
请问该怎么解决啊?我的邮箱minnie0707@126.com
希望得到您的帮助。谢谢!
@ minnie0707
将日历控件放在UserForm1中,
正确代码如下:
Worksheet1中的代码:
‘这段可以不要,目的是双击单元格可以改变日期,为了修改原有的日期方便。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 2 Then UserForm1.Show
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then UserForm1.Show
End Sub
Calendar1的代码:
Private Sub Calendar1_DblClick()
ActiveCell = Calendar1.Value
UserForm1.Hide
End Sub
另外你的Calendar1.Top = Range(“a1″, ActiveCell).Height这句写法也是错的,正确应该是:
Calendar1.Top = ActiveCell.Height
但这里,我想可以用不着吧
替换了但是“引用失效”。给你回邮件了。
很感谢,按照你的方法,解决了问题;