【发布时间】:2014-07-24 08:11:11
【问题描述】:
这可能是一个非常简单的修复,所以请坦白我的“新手”。我有一个非常独特的表单,用户输入一个 PIN#,VBA 代码选择该 ID 并使用本地数据库根据该 ID 更改某些单元格。这些单元格要么填充有来自数据库的数据,要么采用不同的格式,要么两者都基于该 PIN#。
我有一段代码在 DB 中查找引脚,并找到一个 N 或 Y 值,然后相应地格式化一个单元格。问题是我编写了代码,因此如果数据库中的值读取“N”,则更改单元格值、颜色并锁定单元格。如果用户在关联的数据库中键入具有“Y”值的 PIN#,则单元格保持不变......然后说用户在 DB 中键入具有相关“N”值的 PIN#,这些值改变。一切都好,对吧??不!问题是,如果用户返回并在关联的 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 本地 DB 的函数,GetHasChrom 是 ping DB 中的表并返回“Y”或“N”值的查询。我是否需要添加另一个 IF 语句来说明如果它变回的内容?我离这儿很远吗?代码是否需要在其他地方更改?任何帮助表示赞赏
【问题讨论】:
-
您在问题中说得对,数据库中具有“Y”值的 PIN# 保持不变。第一个 If 语句捕获“Y”并在那里结束子过程,这让我对 Else Range("START_MC_LOOKUP").ClearContents 部分感到好奇。 Y 和 N 是您的数据库返回的唯一 2 个值吗?如果是这样,您需要删除第一个 If 语句,以便 Range("START_MC_LOOKUP").ClearContents 以及您想在“Y”场景中添加的任何其他内容。
-
这也是正确的想法。谢谢大卫,如果这是一个答案,我也会给它评分。
标签: vba excel if-statement formatting reformat