Excel VBA:将公式值转换为文本

时间:2017-02-09 09:52:50

标签: excel vba excel-vba

我想得到以下情况的答案。我有基本的VBA知识,如果我使用不正确的表达方式,那就很抱歉。

让我们说我想去长途旅行,但必须检查轮胎'离开前的条件。我必须回答3个问题:

  1. 轮胎是否过度充气? (回答G1)
  2. 是否有任何轮胎平整? (G2)
  3. 由于天气条件不同,我是否需要更换轮胎? (G3)
  4. 事情是,如果任何问题仍未得到答复或答案为是,则需要进一步的操作(在excel表的后续行中,第5-9行)。如果所有3个答案都是No,那么轮胎就可以了,我希望隐藏后续行。

    总结一下,我在G4中输入了以下公式:

    =IF(AND(G1="No",G2="No",G3="No"), "No", "Yes")

    公式完美答案。 我粘贴了一些我到目前为止的代码摘录:

    Worksheet_Change(ByVal Target As Range)
     Select Case Target.Address
      Case "$G$4"
      Rows("5:9").EntireRow.Hidden = (Target = "No")
    ...
    

    问题是代码没有在单元格G4中读取公式的答案。如果我删除公式并手动重写答案,代码将完美运行并隐藏后续行。 因此,主要问题是在G4中转换公式的结果,使其对代码可读。

    有人可以帮忙吗?或者有更好的解决方案吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

问题不在于“在G4中转换公式的结果以使其对代码可读”,因为它是可读的。但Worksheet_Change事件的目标不会是G4,而是G1G2G3,然后会更改G4的值公式计算。但此计算不是Worksheet_Change事件,而是Worksheet_Calculate事件。

因此,您要检查G1事件中G2G3Worksheet_Change是否定位

Private Sub Worksheet_Change(ByVal Target As Range)
 Select Case Target.Address
  Case "$G$1", "$G$2", "$G$3"
  Me.Rows("5:9").EntireRow.Hidden = (Me.Range("G4").Value = "No")
 End Select
End Sub

或者您在Worksheet_Calculate事件中检查公式重新计算的结果:

Private Sub Worksheet_Calculate()
 Me.Rows("5:9").EntireRow.Hidden = (Me.Range("G4").Value = "No")
End Sub