#excel #vba
#excel #vba
Вопрос:
У меня есть текстовое поле и поле со списком на листе Excel, которые зависят друг от друга. Иногда код для текстового поля запускается раньше, чем следовало бы, после ввода всего одного символа вместо ожидания, пока я не нажму на него, что приводит к ошибке. Результат. Смотрите приведенный ниже код и скриншот свойств текстового поля.
Private Sub TextBox1_Lostfocus()
Range("p5").Value = TextBox1.Value
With Range("P5")
.NumberFormat = "0"
.Value = .Value
End With
Range("Q5").FormulaR1C1 = "=IFNA(VLOOKUP(RC[-1],[ShevgenII.xlsb]Sheet1!R1C1:R60C2,2,FALSE),""Error"")"
End Sub
Private Sub ComboBox1_Change()
On Error Resume Next
Sheets("Calculator").Range("q5").Copy
Sheets("Calculator").Range("q5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Calculator").Range("P5").FormulaR1C1 = "=IF(RC[1]=""Fee Class"",""Enter"",LEFT(RC[1],3))"
TextBox1.Value = Range("P5")
Sheets("Calculator").Range("A1").Copy
Sheets("Calculator").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Я знаю, что мой код любительский, я все еще учусь…
Проблема возникает, когда, например, я хочу ввести цифры «524», но мне нужно ввести только «5». Vlookup вернет ошибку, потому что нет совпадения с «5». Обратите внимание, что «q5» является связанной ячейкой для поля со списком, поэтому изменения в текстовом поле автоматически запускают код поля со списком.
Комментарии:
1. Эта строчная буква «f» вызывает подозрение «Lostfocus». У вас есть еще какие-нибудь подводные лодки с таким названием?
2. это то, что vba дал мне из выпадающего меню событий текстового поля
3. В предыдущей версии этого файла Excel у меня также был этот код в той же таблице кодов:
Private Sub TextBox1_Change() End Sub
Я добавил его обратно, и теперь он не создает мне этой проблемы. Есть ли в этом смысл?4. Я бы ожидал, что событие изменения вызовет поведение, упомянутое в вашем вопросе.
5. Правильно, вот почему я изначально удалил его, когда очищал весь дополнительный код перед публикацией этого документа от моих товарищей по команде. Это была просто пустая процедура….
Ответ №1:
В предыдущей версии этого файла Excel у меня также был этот код в той же таблице кодов:
Private Sub TextBox1_Change()
End Sub
Я добавил его обратно, и он работает нормально.
Я изначально удалил его, когда очищал весь дополнительный код перед публикацией этого документа для моих товарищей по команде; именно тогда у меня возникла вышеупомянутая проблема. Однако кажется, что это не лишнее, даже если это пустая процедура. Я предполагаю, что это своего рода указание VBA ничего не делать только из-за изменения, скорее, ему следует подождать, пока текстовое поле не потеряет фокус.