乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 161|回复: 7

Excel VBA程序导入程序

[复制链接]

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2014-10-8 12:40:39 | 显示全部楼层 |阅读模式
我已经搜索过了,但找不到这样做的方法,也许这是做不到的 有没有办法通过编程将excel电子表格代码从另一个电子表格导入VBA IDE 我有500个左右的电子表格需要更新代码,我不想剪切/粘贴到所有500个;我希望有一段代码可以在主文件每次打开时更新它。
回复

使用道具 举报

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2014-10-8 13:49:12 | 显示全部楼层
我似乎记得看到了一些允许你访问VBE代码段的东西,但我也记得一些关于MS锁定它的事情,因为这是virii感染VBA模块的方式之一。
回复

使用道具 举报

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2014-10-8 13:51:08 | 显示全部楼层
我害怕那个,或者类似的事情 我也认为RR在那天做了一些事情,但没有办法找到答案 谢谢Keith
回复

使用道具 举报

2

主题

37

帖子

2

银币

初来乍到

Rank: 1

铜币
45
发表于 2014-10-9 03:37:52 | 显示全部楼层
我知道这是可以做到的。我在此引用几年前遇到的一件事,并将其放在可能的未来,Excel VBA具有VBE对象,其对象层次结构简化版本为:VBE VBProject&nbsp&nbsp VBComponent&nbsp&nbsp&nbsp&nbsp 代码模块&nbsp&nbsp&nbsp&nbsp 设计师&nbsp&nbsp&nbsp&nbsp 属性&nbsp&nbsp 参考VBProject对象应该是您所想要的;我们正在寻找一名开发人员,因为通过这种方式,您也可以编写代码来添加和删除VBA模块或插入VBA代码,但还有一个安全问题,Keith告诉您,VBA宏试图修改VBA项目中的组件时抛出的错误消息取决于Excel“信任中心”对话框中的设置。您可以按如下方式查看和更改此设置:;选择文件->选项;在“Excel选项”对话框中,单击“信任中心”选项卡;在“信任中心”选项卡中,单击“信任中心设置”按钮;在“信任中心”对话框中,单击“宏设置”选项卡,或者,您可以使用开发人员;代码#10140;宏安全命令,直接转到带有标记为“的复选框”的对话框;信任访问VBA项目对象模型“;默认情况下应关闭。即使您选择信任工作簿中包含的宏,如果关闭此设置,宏也无法修改VBA项目。此设置适用于所有工作簿:您可以't仅为特定工作簿更改了它
通过VBA检测此设置是尝试访问VBProject对象,然后检查错误,如通过以下代码所示:
  1. On Error Resume Next
  2. Set x = ActiveWorkbook.VBProject
  3. If Err  0 Then
  4.     MsgBox “Your security settings do not allow this macro to run.”
  5.     Exit Sub
  6. End If[
  7. On Error GoTo 0
作为创建项目的开发人员,您需要启用对Visual Basic项目设置的信任访问,我认为您可以找到VBComponent对象's“;“导出”&引用;删除“;,和“;“导入”;方法对您的特定需求非常有用
通过他们的方式,您可以向用户分发(或自己使用)一个包含宏的工作簿,该宏替换VBA模块,以使用存储在文件中的更新版本进行更新
希望这能帮助你,再见
回复

使用道具 举报

2

主题

37

帖子

2

银币

初来乍到

Rank: 1

铜币
45
发表于 2014-10-9 10:34:13 | 显示全部楼层
好的,这有助于现在了解如何导入ThisWorkbook 谢谢
回复

使用道具 举报

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2014-10-9 11:53:42 | 显示全部楼层
启动时,每个工作簿都由VBProject对象表示
若要使用早期绑定访问它,请建立对Microsoft Visual Basic for Applications扩展性库的引用。工作簿对象具有返回VBProject对象的VBProject属性
例如
  1. Dim VBProj As VBProject
  2. Set VBProj = ActiveWorkbook.VBProject
创建一个对象变量,该变量表示活动工作簿#039;然后您可以访问VBProject'通过VBComponents集合创建组件(用户窗体、模块、类模块和文档模块),如
  1. Dim VBC As VBComponent
然后是
  1. Set VBC = ThisWorkbook.VBProject.VBComponents(1)
  1. Set VBC = ThisWorkbook.VBProject.VBComponents(“Module1”)
例如,您可以用类似的方式列出工作簿中的所有模块
  1. Sub ListModules()
  2.     Dim VBProj As VBProject
  3.     Dim VBComp As VBComponent
  4.     Dim CodeMod As CodeModule
  5.    
  6.     Dim FirstLine As Long
  7.     Dim mssg As String
  8.    
  9.     ' set active workbook's VB Project
  10.     Set VBProj = ActiveWorkbook.VBProject
  11.    
  12.     ' Loop through its components
  13.     For Each VBComp In VBProj.VBComponents
  14.    
  15.         Set CodeMod = VBComp.CodeModule
  16.         
  17.         FirstLine = CodeMod.CountOfDeclarationLines + 1
  18.         Do Until FirstLine >= CodeMod.CountOfLines
  19.             mssg = mssg & VBComp.Name & ": " & CodeMod.ProcOfLine(FirstLine, vbext_pk_Proc) & vbNewLine
  20.             FirstLine = FirstLine + CodeMod.ProcCountLines(CodeMod.ProcOfLine(FirstLine, vbext_pk_Proc), vbext_pk_Proc)
  21.         Loop
  22.         
  23.     Next VBComp
  24.    
  25.     MsgBox mssg
  26. End Sub
在这里,您还可以看到VBComponent属性的使用;代码模块;以及后一种性质和方法。按F1键可以找到其中的联机帮助
回复

使用道具 举报

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2014-10-9 14:49:23 | 显示全部楼层
谢谢,这应该让我朝着正确的方向开始
回复

使用道具 举报

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2015-5-4 14:41:53 | 显示全部楼层
如果有人正在搜索此表单,寻找如何实现此目的的想法,我将采取以下措施确保每个人都在运行最新的代码(此代码正在Excel中使用)
创建一个简单的Excel加载项,该加载项包含从标准位置(我在共享网络文件夹中)将模块加载到vba的代码 加载项永远不会更改,因此适合每个人加载到Excel副本中 这是我为插件编写的代码 它位于;本手册“;章节:
  1. Private Sub app_WorkbookActivate(ByVal Wb As Workbook)
  2. 'Register the ###### Macros
  3. Debug.Print "Registering ###### Macros"
  4. Call RegisterMacros
  5. End Sub
  6. Private Sub Workbook_Open()
  7. On Error Resume Next
  8. Application.EnableEvents = True
  9. Set app = Application
  10. 'Remove ######Functions
  11. Set mf = Application.VBE.VBProjects("*your addin name*").VBComponents.Item("*your module file name*")
  12. Application.VBE.VBProjects("*your addin name*").VBComponents.Item("*your module file name*").Name = "*your module file name*remove"
  13. Application.VBE.VBProjects("*your addin name*").VBComponents.Remove mf
  14. 'Add ######Functions from network
  15. Application.VBE.VBProjects("*your addin name*").VBComponents.Import "*your file location here\*your module file name*.bas"
  16. End Sub
使用此代码,每当打开Excel时,它都会重命名并删除模块(如果存在) 然后将模块导入VBA app_WorkbookActivate事件调用我模块中的一个函数,该函数注册我用Excel编写的所有宏(因此所有用户定义的函数都存储在“UserFunctions”下,而不是存储在自定义文件夹中)
It'这一切都很简单,但在过去的10年里,它一直对我有效 唯一需要记住的是,如果您对模块进行任何更改并保存,您需要;“出口”;模块 如果你不't、 您保存的更改将; 如果你不't、 下次启动Excel时,您保存的更改将被保存的模块覆盖。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 03:56 , Processed in 0.456822 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表