【问题标题】:VBA Vlookup/Match Keys return ValueVBA Vlookup/Match Keys 返回值
【发布时间】: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


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

【讨论】:

  • 好的,这是正确的方向。谢谢!但是我缺少 Range("START_MC_LOOKUP").ClearContents,它会从工作表上输入的前一个 pin 中删除 DB Populated 数据。我认为这只是在 Else 的末尾,如果并且与以前的相同 - Else .... 我试过了,它工作得很好。我超级笨,完全想多了。谢谢 RowanC!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多