Очень просто, что-то вроде:
If Range("L58") = "Sigma Network" And Range("M58") = "" Then
Range("M58").Value = InputBox("Please enter cable length ", "Input value!", 0)
End If
Вы бы, конечно, нуждается в дополнительных логиках, чтобы предотвратить пользователь вводить 0-значение или пустую строку, и т.д.,
Если вы делаете это на например, 50 различных пар клеток, (скажем L58 до L107 и М58 к M107, например), это основная структура петли, которые вы можете использовать:
Dim cl as Range
For Each cl in Range("L58:L107")
If cl.Value = "Sigma Network" and cl.Offset(0,1).Value = "" Then
cl.Offset(0,1).Value = GetValue("Please enter cable length ", "Input value!", 0)
End If
Next
петля может быть дополнительно уточняют d (например, если «Sigma Network» - это не единственное, что вы проверяете, или вам нужен другой текст сообщения для поля ввода на основе некоторых других условий и т. д.
Для этого потребуется пользовательский GetValue
которая вызывает приглашение InputBox
и настроена на предотвращение ввода 0-значного значения пользователем. Для предотвращения ввода других типов данных может потребоваться дополнительная логика.
Function GetValue(msg as String, _
Optional title as String = "", _
Optional default as Double = 0)
'Function that calls the InputBox method
Dim ret
Do Until ret <> 0
ret = InputBox(msg, title, default)
Loop
GetValue = ret
End Function
* Кто-нибудь знает, чего я не хватает в макросе? Я не буду публиковать весь скрипт, потому что он очень длинный ... * ** << ** Эти два утверждения, похоже, противоречат друг другу. Никто здесь не может читать ваш ум ... –
Вместо 'MsgBox' вы, вероятно, захотите использовать' InputBox' и присвоить возвращаемое значение 'Range (« M58 »)', но это всего лишь предположение. –
Это тот же самый скрипт, но разные ячейки. Так что L55, L56, L57 и т. Д. Я не думал, что нужно будет увидеть 50 из того же самого. – Sherri