2017-02-09 247 views
0

我想對以下情況有一個答案。我有基本的VBA知識,對不起,如果我使用不正確的表達式。Excel VBA:將公式值轉換爲文本

假設我想要長途旅行,但在出發前必須檢查輪胎的狀況。我必須在3個問題上有答案:

  1. 輪胎是否過度充氣? (回答G1)
  2. 任何輪胎是否平坦? (G2)
  3. 由於天氣條件不同,是否需要更換輪胎? (G3)

事情是如果任何的問題仍然懸而未決或答案是肯定的,需要進一步的動作(在Excel工作表的後續行,行5-9)。如果所有3個答案都是「否」,輪胎就可以了,我希望隱藏後續行。

的收官結束,我已經進入下面的公式來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中轉換公式的結果以使其對代碼可讀。

任何人都可以幫忙嗎?還是有更好的解決方案?提前致謝。

回答

0

問題不在於「轉換G4中的公式結果,使其對代碼可讀」,因爲它是可讀的。但Worksheet_Change事件的目標將不會是G4,而是G1G2G3,然後將通過公式計算更改G4的值。但是這個計算不是Worksheet_Change事件,而是Worksheet_Calculate事件。

因此,無論您正在檢查是否G1G2G3爲目標Worksheet_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 
+0

它運作良好,謝謝! – bandiras