2017-09-06 73 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子程序相比有一些限制 - 主要的一點是它們只能將信息返回到它們佔用的單元。

相關問題