Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Access VBA中的本地化-未执行字符串中的变量/命令_String_Ms Access_Vba - Fatal编程技术网

String Access VBA中的本地化-未执行字符串中的变量/命令

String Access VBA中的本地化-未执行字符串中的变量/命令,string,ms-access,vba,String,Ms Access,Vba,我试图本地化应用程序向用户显示的消息,因此我使用不同的语言id将所有消息存储在一个访问表中。但是,如果消息字符串是使用不同的变量甚至新行组合而成的,那么生成的消息的格式就不会像它应该的那样,因为整个消息都显示为一个字符串(带有变量名和新行)。这是代码 msgStr = DLookup("msgString", "tLocalization_Messages", "msgId=25") MsgBox msgStr 表中存储的数据为: Name of the vendor is:" & v

我试图本地化应用程序向用户显示的消息,因此我使用不同的语言id将所有消息存储在一个访问表中。但是,如果消息字符串是使用不同的变量甚至新行组合而成的,那么生成的消息的格式就不会像它应该的那样,因为整个消息都显示为一个字符串(带有变量名和新行)。这是代码

msgStr = DLookup("msgString", "tLocalization_Messages", "msgId=25")
MsgBox msgStr
表中存储的数据为:

Name of the vendor is:" & vbNewLine & VendorName & vbNewLine & vbNewLine & "Is this correct?
我将消息内容存储在数据库中,如示例所示,但每当我获取要显示给用户的消息时,它都显示为原样,带有所有的符号和变量名。我怎样才能做到这一点?
谢谢

您发布的这段代码除了缺少空格之外没有什么错,所以发布整个脚本或至少是重要的代码

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


您已将其存储在数据库中:

 "vendor is:" & vbNewLine & VendorName & vbNewLine & vbNewLine & "Is this correct?"
Vendor is: {newline}{vendorname}{newline}{newline}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:" & vbNewLine & VendorName & vbNewLine & vbNewLine & "Is this correct?"
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

当然,您希望为此构建一个通用函数,该函数可以使用自定义键/值对(字典)进行参数化,其中所有变量都在其中,但我将此作为练习。

Hi Peter,我的问题是,我从数据库填充消息框,并将内容作为字符串存储在数据库中。因此,每当我拉取这些数据来填充消息框时,整个内容都显示为一个字符串。这就是我试图解决的问题。这是我收到的消息框的截图,希望它能更好地表达我的问题。我真的需要更多的代码来帮助你,当然是调用messagebox的部分,以及从数据库中存储和获取数据的部分。那么这个带符号的字符串也同样在数据库中,你需要将它作为解释字符串放入数据库中,我能看到你代码的这一部分吗?还有你的DLookup函数,但我明天必须回答,这里晚上快2点了,我要睡觉了。我手动填充数据库,这是一个小应用程序,我没有太多消息需要本地化。因此,我可以将它们以任何格式放入数据库如果您执行类似“更新表集字段=”“某些消息”&vbNewLine&“消息继续”&someVariable&“消息结束”之类的操作,应该可以。当我尝试Eval()时,我会收到一个运行时错误2482,指出“找不到您在表达式中输入的名称‘vbNewLine’”。“可能是您试图在一个
Access
实例上运行
VBA
,而不是在Windows shell上运行
VBScript
?@SteppenWolf嗯,似乎不可能在同一范围内使用Eval on Access VBA。”。我建议考虑在这个答案中提出的替代方案:用实际值替换{ACCOLARDIE}中的变量。顺便说一句,我更新了你的标签。