VBA Vlookup / Match Keys返回值

时间:2014-07-23 22:57:54

标签: vba excel-vba if-statement formatting reformat

这可能是一个非常简单的修复,所以请用我的" noviceness"。我有一个非常独特的形式,用户输入PIN#,VBA代码选择该ID并使用本地数据库根据该ID更改某些单元格。单元格中填充了来自数据库的数据,相应地格式化不同,或两者都有...所有都基于该PIN#。

我有一段代码在DB中查找引脚,并找到一个N或Y值,然后相应地格式化一个单元格。问题是我编写了代码,以便如果DB中的值读取" N"然后更改单元格值,颜色并锁定单元格。如果用户输入的PIN#具有" Y"在关联的数据库中,单元格保持不变...然后说用户在PIN#中输入相关的" N" DB中的值,值会发生变化。一切都好,对吗?没有!问题在于,如果用户返回并输入具有相关" Y"的不同PIN#。在关联的数据库中,单元格不会恢复原样,但保持灰色并锁定。必须有一个顺序出现或某事的声明......我错过了什么?

Sub setChromBox()

 If GetLDBValue(GetHasChrom(Range("START_PIN").value)) = "Y" Then
    Exit Sub
 End If

 If GetLDBValue(GetHasChrom(Range("START_PIN").value)) = "N" Then
    Range("START_GCTR").value = "NO"
    Range("START_GCTR").Interior.ColorIndex = TRColor.Color_Null
    Range("START_GCTR").Locked = True
 Else
    Range("START_MC_LOOKUP").ClearContents

注意:GetLDBValue只是一个ping本地数据库的函数,GetHasChrom是查询数据库中的表并返回" Y"的值的查询。或" N"。我是否需要添加另一个IF声明,说明如果它变回来的话?我离开这里了吗?代码是否需要在其他地方更改?任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

是的,我认为你是对的,你需要在代码中做一点改变,试试这个:

Sub setChromBox()

 If GetLDBValue(GetHasChrom(Range("START_PIN").value)) = "Y" Then
    Range("START_GCTR").Locked = False
    Range("START_GCTR").value = 'desired text here
    Range("START_GCTR").Interior.ColorIndex = 'Desired Colour here

 Else If GetLDBValue(GetHasChrom(Range("START_PIN").value)) = "N" Then
    Range("START_GCTR").value = "NO"
    Range("START_GCTR").Interior.ColorIndex = TRColor.Color_Null
    Range("START_GCTR").Locked = True
 End If

End Sub

如果所需的文字和颜色与以前一样,这有点棘手。在'N'案例运行之前,您需要将这些值存储在某处。您可以将它们存储在工作表的单元格中,也可以存储在公共静态变量中,该变量将在宏的执行之间保留。