2014-07-25 28 views
2

是否有將字符串轉換爲可執行代碼行的方法?VBA如何將一個字符串作爲一行代碼運行

類似:

Dim Line1 as String 
Line1 = "MsgBox (""Hello"")" 
Execute Line1 

導致彈出框說你好。

我正在做的是從文本文件中拉出線條。我可以拉出表單控件的名稱,並使用它們對這些表單控件執行操作,但我想更進一步並執行行。 我看到的權利要求,這將工作:

Application.Run Line1 

或使變量的數組,並將其存儲在元件1例如並使用

Application.Run Line1(1) 

但它不適用於我。

好的,在寫這篇文章的時候我也一直在做實驗。我發現,當1號線是一個消息框

Eval (Line1) 

將工作,但不是當它是一樣的東西:

line1 = "DoCmd.OpenForm ""form1""" 

任何提示,將不勝感激。

感謝

回答

3

可以使用,

Eval("DoCmd.OpenForm(""form1"")") 

你必須確保所有的功能你包括使用括號。 進一步參考, http://msdn.microsoft.com/en-us/library/office/aa172212(v=office.11).aspx

+0

感謝您對圓括號的建議,但它仍然無效。按照您在運行時錯誤2482中寫入結果的方式編寫代碼,「數據庫無法找到您在表達式」 –

+0

「中輸入的名稱'DoCmd',我使用Access 2003在現有數據庫上使用form1對其進行了測試。你能把它放到我的上下文中併發布你添加的代碼嗎?另外,您使用的是哪個版本的Access? –

+0

要測試語法,我實際上只是將代碼綁定到一個新按鈕: Private Sub Command118_Click() Eval(「DoCmd。的OpenForm(「」 frmMain「」)「) 結束小組 已經有相同的表單上的按鈕,成功地使用: DoCmd.OpenForm‘frmMain’ 所以我儘量減少潛在的變數,我在Access 2007中。 如果我在Eval中將其更改爲「Application.DoCmd ...」,我會收到有關DoCmd在沙箱模式中不安全但向功能按鈕添加相同的「應用程序」的消息。 我想這可能是DoCmd在沙箱模式下無法使用Eval。 –

0

這不正是我一直在問,我最終會略有不同的方向,但這裏是我落得這樣做,它可能會被輕易改變,以更符合我的問題。實際上,我從外部文本文件中取出一行文本,並將它們插入一行代碼中。我在這個例子中做的只是隱藏列,外部文本文件是列名稱列表。 (搞清楚如何輸出,這是一種樂趣)

Open "C:\UserList.txt" For Input As #TextFile 
While Not EOF(TextFile) 
Line Input #TextFile, TextLine 
Screen.ActiveDatasheet.Controls(TextLine).ColumnHidden = True 
Wend 
1

Visual Basic是一個編譯語言,因此不支持它運行時執行人類可讀的代碼的能力。所有使用VBA編寫的代碼必須在程序第一次運行之前首先進行編譯。 但是,SQL是一種解釋器語言,可以交給代碼執行,它將逐行執行。您也可以在程序運行時從其他來源獲取變量的內容,在程序運行時不能建立字符串,然後直接在VBA中執行。

相關問題