是否可以执行在特定excel单元格中编写的代码?
例如:在Range("A1")
我text -> debug.print("Test")
。我需要一些方法来从VBA代码执行它。
有可能吗?
答案 0 :(得分:3)
首先,使用this answer确保以编程方式访问VBA模型。然后,使用this method为位于工作表单元格中的简单命令创建字符串解析器。这应该足以让你前进。
<强>演示:强>
Option Explicit
Sub test()
Dim strCode As String
strCode = Sheet1.Range("A1").Text
StringExecute strCode
End Sub
Sub StringExecute(s As String)
' Credits to A.S.H., see https://stackoverflow.com/questions/43216390/how-to-run-a-string-as-a-command-in-vba
Dim vbComp As Object
Set vbComp = ThisWorkbook.VBProject.VBComponents.Add(1)
vbComp.CodeModule.AddFromString "Sub foo()" & vbCrLf & s & vbCrLf & "End Sub"
Application.Run vbComp.Name & ".foo"
ThisWorkbook.VBProject.VBComponents.Remove vbComp
End Sub
答案 1 :(得分:0)
没有。您无法在工作表中存储代码。但是,您可以在工作表单元格中存储过程的名称,然后使用Application.Run
答案 2 :(得分:0)
简答:否
您只能运行VBA编辑器中的代码。因此,无法直接从单元格运行代码。
但是......
但你可以做的(作为一种解决方法)是编写一个过程,从该单元格中提取VBA代码并将其包含在一个模块中,然后运行该代码。
然而,即使这是可能的,这对于专业用户来说也是一项任务,不建议初学者使用(你应该知道你在这里做了什么)。
然而,如果您想了解如何将程序/功能添加到VBA编辑器中,请查看Programming The VBA Editor。
答案 3 :(得分:0)
您可以轻松实现目标的最近方法是使用VBA用户定义函数。这些可以通过工作表公式以与本机Excel函数相同的方式调用。
但与VBA子程序相比,它们有局限性 - 主要原因是它们只能将信息返回到它们占用的单元格。