0

这可能是一个非常简单的修复,所以请坦白我的“新手”。我有一个非常独特的表单,用户输入一个 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 语句来说明如果它变回的内容?我离这儿很远吗?代码是否需要在其他地方更改?任何帮助表示赞赏

4

1 回答 1

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”案例之前,您需要将这些值存储在某处。您可以将它们存储在工作表的单元格中,或者存储在公共静态变量中,这将在宏的执行之间持续存在。

于 2014-07-24T00:11:11.140 回答