Excel VBA程序导入程序
我已经搜索过,找不到一种方法来做到这一点,也许它不能做到。 有没有办法让一个Excel电子表格以编程方式将代码从另一个电子表格导入VBA IDE? 我有500个左右的电子表格需要更新代码,我不想剪切/粘贴到所有500个电子表格。 我希望有一段代码可以在每次打开主文件时更新主文件中的代码。**** Hidden Message ***** 我似乎记得看到了一些允许你访问VBE代码段的东西,但我也记得一些关于MS锁定它的事情,因为这是virii感染VBA模块的方式之一。 我害怕那个,或类似的东西。 我也以为RR在当时已经做了一些事情,但没有办法搜索它。 谢谢基思 我知道这是可以做到的。我特此引用我多年前遇到的一些东西,并为将来可能的
Excel VBA具有VBE对象,其对象层次结构简化版本是:
VBE
VBProject
VBComponent
CodeModule
Designer
属性
参考
VBProject对象应该是您作为开发人员正在寻找的,因为通过它的手段,您还可以编写用于添加和删除VBA模块或插入VBA代码的
代码但是,当
VBA宏尝试修改VBA项目中的组件时,Keith错误消息会告诉您安全问题,这取决于Excels信任中心对话框中的设置。您可以查看和更改此设置如下:
- 选择文件 ->选项
- 在 Excel 选项对话框中,单击“信任中心”选项卡
- 在“信任中心”选项卡中,单击“信任中心设置”按钮
- 在“信任中心”对话框中,单击“宏设置”选项卡
或者,可以使用“开发人员代码”“宏安全”命令直接转到一个对话框,其中包含一个标记为“信任对 VBA 项目对象模型的访问”的复选框,该对话框应默认情况下处于关闭状态。即使您选择信任工作簿中包含的宏,如果关闭此设置,宏也无法修改 VBA 项目。此设置适用于所有工作簿:您无法仅针对特定工作簿更改此设置。
要通过VBA检测此设置,请尝试访问VBProject对象,然后检查错误,如以下代码所示:
On Error Resume Next
Set x = ActiveWorkbook.VBProject
If Err0 Then
MsgBox Your security settings do not allow this macro to run.
Exit Sub
End If[
On Error GoTo 0
作为创建项目的开发人员,您需要启用对Visual Basic项目的信任访问设置
,我认为您可以找到VBComponent对象的“导出”,“删除”和“导入”方法对您的特定需求非常有用。
通过他们的方式,您可以分发用户(或自己使用它)一个工作簿,其中包含一个宏,该宏替换VBA模块以使用存储在文件中的更新版本进行更新。
希望这可以帮助你
再见 好吧,这很有帮助,现在弄清楚如何导入到ThisWorkbook。 谢谢 作为启动
程序 每个工作簿都由一个 VBProject 对象表示。
若要使用早期绑定访问它,请建立对 Microsoft Visual Basic for Applications 扩展性库的引用
工作簿对象具有返回 VBProject 对象的 VBProject 属性。
例如,使用
Dim VBProj As VBProject
Set VBProj = ActiveWorkbook.VBProject
,您可以创建一个表示活动工作簿的VBProject对象的对象变量
,然后您可以通过VBComponents集合访问VBProject的组件(UserForms,模块,类模块和文档模块),例如
Dim VBC As VBComponent
后跟
Set VBC = ThisWorkbook.VBProject.VBComponents(1)
或
Set VBC = ThisWorkbook.VBProject.VBComponents(Module1)
,例如您可以使用类似
Sub ListModules()
Dim VBProj As VBProject
Dim VBComp As VBComponent
Dim CodeMod As CodeModule
Dim FirstLine As Long
Dim mssg As String
' set active workbook's VB Project
Set VBProj = ActiveWorkbook.VBProject
' Loop through its components
For Each VBComp In VBProj.VBComponents
Set CodeMod = VBComp.CodeModule
FirstLine = CodeMod.CountOfDeclarationLines + 1
Do Until FirstLine >= CodeMod.CountOfLines
mssg = mssg & VBComp.Name & ": " & CodeMod.ProcOfLine(FirstLine, vbext_pk_Proc) & vbNewLine
FirstLine = FirstLine + CodeMod.ProcCountLines(CodeMod.ProcOfLine(FirstLine, vbext_pk_Proc), vbext_pk_Proc)
Loop
Next VBComp
MsgBox mssg
End Sub
的内容列出工作簿中的所有模块。您还可以在其中看到 VBComponent 属性“CodeModule”以及后面的一些属性和方法的使用。其中,您可以找到按F1键的在线帮助 谢谢,这会让我朝着正确的方向开始
页:
[1]