excel - 可以将代码从单元格写入 VBA 吗?

标签 excel vba

我想知道如何在 VBA 中调用一些东西来在运行时编写它的代码?所以我的意思是如果我有 文字 在 A1 中阅读:

sub Write()
   Call OtherScript
End Sub
所以这又是单元格内的文本,而不是 VBA 脚本中的文本。然后在脚本运行时调用“A1”,A1 中的代码通过 VBA 运行,而无需实际将其放入其中。
这显然不是一个真正的代码,我真的只是想知道这是否可能。一位帮助我学习编码并帮助我完成大量 VBA 的 friend 说,他不知道这将如何工作,所以我将其发布在这里以查看是否可能。

最佳答案

请尝试以下代码。在运行它之前,在一个单元格中写入:

sub WriteSomething() 
   Call OtherScript
End Sub
您不能创建名为 Write 的函数/子程序因为这个词是非法的,在 VBA 中有其他含义。
并在下一个单元格中(在同一行):
sub OtherScript()
   MsgBox "Hello!"
End Sub
我用了“K2”。也使用它,或者从代码中调整范围。您还应该有一个 Module3标准模块。请用您的vbProject 中现有的模块名称更新模块名称。 .无论如何,代码也可以创建模块......
复制下一个代码并运行它:
Sub write_Run_Subs()
   'It needs a reference to 'Microsoft Visual Basic For Applications Extensibility x.x'
   Dim vbProj As VBProject, objMod As VBComponent, mdlName As String
   Dim rngStr As Range, strSub1 As String, strSub2 As String
   
   Set rngStr = Range("K2")
   strSub1 = rngStr.value
   strSub2 = rngStr.Offset(0, 1).value
   mdlName = "Module3" 'of course, it have to exist in ThisWorkbook vbProject
   Set vbProj = ThisWorkbook.VBProject
   Set objMod = vbProj.VBComponents(mdlName)
   objMod.CodeModule.AddFromString strSub1
   objMod.CodeModule.AddFromString strSub2
   
   Application.Run mdlName & ".WriteSomething"
End Sub
它只是一个没有太多错误处理的简单代码,但它应该可以工作......如果你运行它两次,它会插入两个这样的子,如果不初步检查它们的存在。
如果添加必要的引用看起来很复杂,请先运行以下代码,它将添加它:
Sub addExtenssibilityReference()
   'Add a reference to 'Microsoft Visual Basic for Applications Extensibility 5.3':
   ThisWorkbook.VBProject.References.AddFromGuid _
        GUID:="{0002E157-0000-0000-C000-000000000046}", _
        Major:=5, Minor:=3
End Sub

关于excel - 可以将代码从单元格写入 VBA 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72118552/

相关文章:

vba - [VBA][excel]在 'Japanese - Katakana'中使用 'inStr'时发生错误

php - 导入excel文件时方法 block 不存在

excel - 根据邮政编码区域将包含邮政编码前缀列表的行拆分为多行

vba - Excel VBA 隐藏所有打开的用户窗体

VBA - 从 Excel 将任务添加到 MS 项目

vba - VBA有字典结构吗?

excel - 如何使用多个分隔符拆分字符串并在vba excel中加入部分?

Excel VBA 使用单元格和 xlDown 选择范围

excel - 使用 Office365 Excel 数组公式,如何将每个新人的年初至今总计重置为零?

excel - 插件 - 此工作簿当前被另一个工作簿引用,无法关闭