2017-09-06 78 views
1

是否可以执行用特定的excel单元格编写的代码?VBA执行存储在单元中的代码 - 有可能吗?

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

可能吗?

+0

在Excel4类型的工作表中总是有Excel4宏? –

回答

0

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

0

简短的回答是过程:没有

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

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

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

不过,如果您想查看如何将程序/函数添加到VBA编辑器中,请查看Programming The VBA Editor

+0

我只需要使用像instr,abs等简单的函数,所以我想只要在单元格中查找特定的单词并且发现它们使用特定的功能就会更容易。 – Drac0

3

首先,使用this answer确保对VBA模型进行编程访问。然后,使用this method为位于工作表单元格中的简单命令创建字符串解析器。这应该足以让你去。

演示:

enter image description here

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 
+0

'Application.Run'行可以替换为'Evaluate foo'? – AntiDrondert

+0

我不这么认为:'Evaluate'解析一个字符串到一个基于excel的公式,这与'Application.Run'不一样。 – Ioannis

+0

'Worksheet(“Sheet”)。评估“0 + Test()”尽管适用于我。我很好奇,你是以编程方式创建单独的模块与“Sub”,其中包含一行从单元?有点新VBA,所以任何新的事情令我惊叹。 – AntiDrondert

0

最接近你可以轻松地得到你的目标是使用VBA用户定义函数。这些可以从工作表公式中调用,就像本机Excel函数一样。

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

相关问题