Страница 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, выполнение процедуры начинается сначала :confused:
на пробной форме "втупую" SetFocus устанавливается без проблем :confused:

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, спасибо! Сейчас буду пробовать.
***
чёт не могу въехать, куда притулить Ваш код (первый фрагмент) :confused:

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 знает ?