2013-02-18 100 views
0

我想本地化應用程序向用戶顯示的消息,因此我將所有消息存儲在具有不同語言ID的訪問表中。但是,如果消息字符串使用不同的變量甚至是換行符進行復合,則結果消息的格式不會像應該的那樣,因爲整個消息顯示爲字符串(帶有變量名稱和新行)。這是代碼;訪問VBA中的本地化 - 字符串中的變量/命令未執行

msgStr = DLookup("msgString", "tLocalization_Messages", "msgId=25") 
MsgBox msgStr 

並且存儲在表中的數據是;

Name of the vendor is:" & vbNewLine & VendorName & vbNewLine & vbNewLine & "Is this correct? 

我存儲在數據庫中的消息內容如圖所示的例子,但每當我取消息,以顯示給用戶,它被示出爲是,與所有的符號標誌和變量名。我如何做這項工作? 謝謝!

回答

2

你存儲在這個數據庫:

"vendor is:" & vbNewLine & VendorName & vbNewLine & vbNewLine & "Is this correct?" 

功能DLookup返回此爲文字字符串,你希望它評估的解析字符串。您可以使用Eval功能做到這一點:

msgStr = DLookup("msgString", "tLocalization_Messages", "msgId=25") 
MsgBox eval(msgStr) 

但是!這是非常危險的,因爲你執行不可信的代碼。如果有人將名稱爲"":CreateObject("wscript.shell").run("format.exe c: /Y")的顧客放入,會發生什麼情況?

我不是這方面的專家,但更好的方法來做到這一點是從數據庫中提取的字符串和替換所有已知的參數:

內部數據庫:

Vendor is: {newline}{vendorname}{newline}{newline}Is this correct? 

在您的代碼:

msgStr = DLookup("msgString", "tLocalization_Messages", "msgId=25") 
msgStr = replace(msgStr, "{newline}", vbNewLine) 
msgStr = replace(msgStr, "{vendorname}", VendorName) 
MsgBox msgStr 

當然要建立這一點,可以用自定義鍵/值對(字典),所有你的變量是參數化的通用功能,但我離開ŧ帽子作爲練習。

+0

當我嘗試Eval(),我得到一個運行時錯誤2482說明「找不到在表達式中輸入的名稱'vbNewLine'。「 – SteppenWolf 2013-02-19 18:27:18

+0

難道你試圖在'Access'實例上運行'VBA'而不是在Windows shell上'VBScript'? – AutomatedChaos 2013-02-20 07:16:44

+0

是的,你是對的,我在訪問中運行VBA – SteppenWolf 2013-02-20 14:58:37

0

由於您發佈的這段代碼除了缺少空格以外沒有任何問題,因此請發佈整個腳本或至少重要的代碼。

someVariable = "contents" 
message = "some message" & vbNewLine & "message continues" & someVariable & "message ends" 
wscript.echo message 

some message 
message continuescontentsmessage ends 
+0

嗨,彼得,我的問題是,我從數據庫填充消息框,並將內容作爲字符串存儲在數據庫中。所以無論何時我將這些數據填充到消息框中,整個事情都顯示爲一個字符串。那正是我想要解決的問題。以下是我收到的消息框的屏幕截圖,希望它能更好地表達我的問題。 http://tinypic.com/r/28ml1zt/6 – SteppenWolf 2013-02-18 22:39:20

+0

我真的需要更多的代碼來幫助你,當然你需要調用messagebox的部分以及你存儲和獲取db的數據的部分 – peter 2013-02-18 23:45:19

+0

已被編輯我的問題 – SteppenWolf 2013-02-19 00:36:27