VBA执行存储在单元格中的代码 – 有可能吗?

是否有可能执行代码写在特定的Excel单元格?

例如:在Range("A1")我有text -> debug.print("Test") 。 我需要一些方法来从VBA代码执行此。

可能吗?

首先,使用这个答案来确保编程访问VBA模型。 然后,使用此方法为位于工作表单元格中的简单命令创buildstringparsing器。 这应该足以让你走了。

演示:

在这里输入图像说明

 Option Explicit Sub test() Dim strCode As String strCode = Sheet1.Range("A1").Text StringExecute strCode End Sub Sub StringExecute(s As String) ' Credits to ASH, 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 

不可以。您不能在工作表中存储代码。 但是,您可以将过程的名称存储在工作表单元格中,然后使用Application.Run调用该过程

简短的回答:

您只能运行VBA编辑器内的代码。 因此无法直接从单元中运行代码。

但是…
但是你可以做什么(作为一种解决方法)是编写一个过程,从该单元中提取VBA代码并将其包含到模块中,然后运行该代码。

但是,即使这是可能的,这将是一个亲用户的任务,它不build议初学者(你应该知道你在这里做什么)。

不过,如果你想了解如何将程序/函数添加到VBA编辑器中,请看编程VBA编辑器 。

你可以很容易地达到你的目标是使用VBA用户定义函数。 这些可以从本机Excel函数相同的方式从工作表公式调用。

但是与VBA子程序相比,它们有局限性 – 主要的一点是它们只能将信息返回到它们占用的单元。