使用DLookup键入不匹配,以将全局变量名称(字符串)返回/评估到指定为.BackColor(long)的RHS(可能的类型转换问题?)

时间:2015-02-10 20:23:05

标签: ms-access access-vba ms-access-2010

问题:

使用DLookup将全局变量名(字符串)返回到赋予.BackColor(long)属性的RHS时,我收到类型不匹配错误。

如何通过记录查找(string)传递变量名称(text / DLookup)并在表达式的RHS上评估其内容。

“告诉我名称与此字符串”

匹配的变量的值

调试:

我尝试了各种版本的转义(使用"'),评估(使用Eval()),类型转换(使用ClngCstr ),并检查适当的范围,但没有成功。请参阅“调试立即输出”部分

从下面的代码中,特别是这一行:Me.cboSelect.BackColor = DLookup("[BackColor]", "myTable", "[myTableID] = " & Me.cboSelect.value)

如果Me.cboSelect.value=1代码因类型不匹配而中断。

如果Me.cboSelect.value=2,则代码可以正常运行。

情况:

我想在我的表中定义一些我可以存储的常见颜色(作为全局变量名而不是晦涩的数字代码)以及需要突出显示的数据。我不想使用条件格式,因为每个表单都需要使用GUI来设置条件,我更喜欢使用VBA进行突出显示以及表单中的数据输入(这也会导致更一致的用户界面。

基本上我希望能够存储全局变量名称和我的数据。即使有更好的解决方案在VBA中进行条件格式化,我仍然想知道如何通过记录查找传递变量名称并评估其内容。

代码:

MyTable的

myTableID(autoNum)  mainData     Backcolor(text)
1                   "str1"       glngOrange
2                   "str2"       52479

常量(VBA模块)

Global glngOrange As Long
Public Sub initGlobals()
    glngOrange = RGB(255, 204, 0) ' 52479
End Sub

表格(VBA模块)

Private Sub Form_Open(Cancel As Integer)
    Call initGlobals
End Sub

Private Sub cboSelect_LostFocus()
    Debug.Print "A) Check that global is in scope. glngOrange = ", glngOrange
    Debug.Print "B) Dlookup ", DLookup("[BackColor]", "myTable", "[myTableID] = " & Me.cboSelect.value)
    Debug.Print "C) Type ", TypeName(DLookup("[BackColor]", "myTable", "[myTableID] = " & Me.cboSelect.value))

    'The following line works if .value=2, fails if .value=1
    Me.cboSelect.BackColor = DLookup("[BackColor]", "myTable", "[myTableID] = " & Me.cboSelect.value)
End Sub

调试立即输出

A) Check that global is in scope. glngOrange = 52479 
B) Dlookup       glngOrange
C) Type          String

2 个答案:

答案 0 :(得分:1)

看起来你正在尝试像"给我一个名称与此字符串匹配的变量的值"

在这条路上,我建议你考虑一种不同的方法。

使用Scripting.Dictionary代替一组全局变量,Dim dct As Object Set dct = CreateObject("Scripting.Dictionary") dct.Add "glngOrange", 52479 ' and so forth ... ' later you can retrieve the number associated with a given key ... Debug.Print dct("glngOrange") 将您的名称作为其键,相应的数字作为其值。

{{1}}

答案 1 :(得分:1)

HansUp已经为您的问题提供了一个时尚的解决方案。我个人会编辑 myTable ,为表示颜色名称的实际长号添加另一个字段。这将使您有机会远程控制颜色代码(如果表是链接表,则为。)

回答您的上一个问题如何将字符串/文本转换为vba代码。一种方法是使用" Microsoft Visual Basic For Applications可扩展性库"构造和执行(.Run)字符串到vba代码。

在此处阅读更多内容:http://www.cpearson.com/excel/vbe.aspx