2017-02-09 3 views
0

Я хотел бы получить ответ на следующую ситуацию. У меня есть базовые знания VBA, извините, если я использую неправильные выражения.Excel VBA: преобразовать значение формулы в текст

Предположим, что я хотел бы отправиться в долгий путь, но перед отъездом нужно проверить состояние шин. У меня должны быть ответы на 3 вопроса:

  1. Являются ли шины под/overinflated? (ответ на вопрос 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, но либо G1, либо G2 или G3, который затем изменит значение G4 по формуле расчета. Но этот расчет не является событием Worksheet_Change, а событием Worksheet_Calculate.

Так как вы проверяете ли G1 или G2 или G3 является мишенью в 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

Смежные вопросы