Страница 1 из 1
Не могу установить SetFocus
Добавлено: 23 мар 2008, 01:34
VictorM
Появилась такая проблемка. Поиск по форуму ничего не дал.
На форме несколько TextBox ов. Первый "Закупка", второй "Продажа" и т.д.
Пытаюсь сделать проверку на то, чтобы поле Закупка небыло пустым или Закупка небыла больше Продажи. Вроде все просто. Но после проверки не могу установить фокус в поле Закупка. Активируется поле со следующим TabIndex.
Код: Выделить всё
Private Sub Продажа_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Sheets("Рассрочка").Range("D9") = Продажа.Text
If Закупка.Text = "" Or Закупка.Text > Продажа.Text Then
MsgBox "Ошибка в поле 'Закупка' ", vbInformation, " "
Продажа.Text = ""
Закупка.SetFocus
Exit Sub
End If
End Sub
Подскажите, где моя ошибка?
Спасибо.
p.s. после разных экспериментов замечаю, что дело по-моему в
BeforeUpdate. После выполнения строки
Закупка.SetFocus, выполнение процедуры начинается сначала
на пробной форме "втупую"
SetFocus устанавливается без проблем

Re: Не могу установить SetFocus
Добавлено: 23 мар 2008, 14:33
SunKiSSka
VictorM, у меня есть такой вариант, который позволяет вернуться на то же место (на тот же Text Box) на форме при потере фокуса:
Код: Выделить всё
Dim x
Private Sub Text1_GotFocus()
On Error Resume Next
Text1.SelStart = x
End Sub
Private Sub Text1_LostFocus()
x = Text1.SelStart
End Sub
когда то такое делала, вроде должно работать
И есть, например, код для перебора массива элементов Text Box, который позволяет последовательно обойти все элементы:
Код: Выделить всё
Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then 'нажата клавиша ENTER
NewIndex = Index + 1 'вычисляется следующий по индексу TextBox
On Error Resume Next 'если достигнут последний индекс, это позволит избежать ошибки
Text1(NewIndex).SetFocus 'операция получения ввода следующего ТекстБокса
End If
End Sub
Re: Не могу установить SetFocus
Добавлено: 23 мар 2008, 15:13
VictorM
SunKiSSka, спасибо! Сейчас буду пробовать.
***
чёт не могу въехать, куда притулить Ваш код (первый фрагмент)

Re: Не могу установить SetFocus
Добавлено: 30 мар 2008, 09:10
VictorM
Вопрос решен. На соседнем форуме есть такой человек -
pashulka (жаль, что он перестал заходить на наш форум). С его помощью и была решена эта задача.
Код: Выделить всё
Private iFocus As Boolean
Private Sub Продажа_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Temp_Macro
End Sub
Private Sub Продажа_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then Temp_Macro
End Sub
Private Sub Temp_Macro()
If iFocus = True Then
iFocus = False: Exit Sub
End If
If Закупка.Value = "" Or _
Val(Закупка.Value) > Val(Продажа.Value) Then
'На самом деле просто Val() недостаточно, ибо :
'MsgBox Val("5.5")
'MsgBox Val("5,5")
iFocus = True 'Or iFocus = Not iFocus
Продажа.Value = "": Закупка.SetFocus
End If
End Sub
p.s. кому интересны подробности
http://www.progz.ru/forum/index.php?showtopic=36042
Re: Не могу установить SetFocus
Добавлено: 30 мар 2008, 23:53
kminas
VictorM писал(а):Вопрос решен. На соседнем форуме есть такой человек - pashulka (жаль, что он перестал заходить на наш форум). С его помощью и была решена эта задача.
Умный мужик, мне здорово помог.
SunKiSSka писал(а):И есть, например, код для перебора массива элементов Text Box, который позволяет последовательно обойти все элементы:
Код: Выделить всё
Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then 'нажата клавиша ENTER
NewIndex = Index + 1 'вычисляется следующий по индексу TextBox
On Error Resume Next 'если достигнут последний индекс, это позволит избежать ошибки
Text1(NewIndex).SetFocus 'операция получения ввода следующего ТекстБокса
End If
End Sub
А как потом вернуть фокус на CommandButton?
Re: Не могу установить SetFocus
Добавлено: 31 мар 2008, 00:14
VictorM
Умный мужик, мне здорово помог.
Да уж, он очень многим помог.
А как потом вернуть фокус на CommandButton?
я пока не разбирался с этим кодом. Может
SunKiSSka знает ?