Доброго времени суток, уважаемые форумчане. Пол-дня сегодня потерял, пытаясь разобраться. Итак, на форме есть текстбокс и придумалось мне, чтобы код по вставке данных срабатывал на нажатие Enter после ввода числа в упомянутый текстбокс (подобрал перебором, change или select не подходят, т.к. число может быть из нескольких разрядов). Код вышел таким (Write_mat это имя текстбокса, формы вызывается двойным кликом в столбце G):
но когда начал тестировать, то excel всякий раз выпадал с ошибкой: automation error. Вызванный объект был отключен от клиентов. Пробовал отключать все что можно и в коде инициализации формы и в приведенном выше коде и в коде листов - ничего не помогает. Уже от отчаяния попробовал перенести код с события AfterUpdate просто на кнопку и все заработало, так что решение так или иначе есть, но вопросы все-таки остались: почему такое поведение события AfterUpdate и можно ли все таки сделать так ,чтобы код срабатывал на нажатие на клавиатуре кнопки Enter?
Заранее спасибо всем откликнувшимся.
Код |
---|
Private Sub Write_mat_AfterUpdate() 'аналог кнопки (сработка по Enter) Dim LastRow_r As Long On Error Resume Next If Len(Me.Consumer.Value) > 0 Then If CDbl(Me.Write_mat.Value) <= CDbl(Me.Rest.Value) Then With Sheets("Расход") LastRow_r = .Cells(Rows.Count, 2).End(xlUp).Row + 1 .Cells(LastRow_r, 1).Value = ActiveCell.Offset(, -5).Value 'дата расхода ... End With Unload Me Else: MsgBox "Вы не можете списать более " & Me.Rest.Value & ActiveCell.Offset(, -1).Value, vbCritical, "Внимание! Превышение остатка": Exit Sub End If If CDbl(Me.Write_mat.Value) = CDbl(Me.Rest.Value) Then ActiveCell.Interior.Color = &HFF00& 'визуализация полного расхода позиции Else Me.Consumer.BackColor = &HFF& MsgBox "Вы не указали потребителя (поле выделено красным цветом), исправьте", vbInformation, "Внимание!": Exit Sub End If End Sub |
Заранее спасибо всем откликнувшимся.