Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Переход по ENTER-у на форме заполнения - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Переход по ENTER-у на форме заполнения
DKeT Дата: Среда, 15.05.2019, 12:56 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 3 ±
Замечаний: 20% ±

Excel 2007
Добрый день, скажите пожалуйста, как на данной форме сделать так, что при нажатии на ENTER или TAB заполнение записи было друг за другом? Сейчас получается что заполнение записи идет по порядку только до 4 строки заполнения, а дальше в разброс. Форма по ссылке Внешняя ссылка удалена администрацией - это нарушение п.3 Правил форума

Код:
[vba]
Код
Dim Mz As Integer

Private Sub TextBox1_Change()
TextBox1.Enabled = False
TextBox2.SetFocus
End Sub
Sub TextBox7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim B ' As Long
If Mz = vbNo Then Mz = vbYes: Exit Sub
N = LastN
B = Me.Controls("TextBox7")
If Not IsNumeric(B) Then
  MsgBox "ВВедите код профессии (число больше нуля)!"
  Cancel = True: TextBox7.SetFocus: Exit Sub
Else
  B = Val(B)
End If
Mz = vbYes
If B > 0 Then
  For I = 4 To N
    If B = Cells(I, 3) Then
      Mz = MsgBox("Такая запись уже существует! Продолжить?" & vbCrLf & _
      "Да - игнорировать совпадения" & vbCrLf & _
      "Нет - закрыть форму" & vbCrLf & _
      "Отмена - остаемся на вводе кода", vbYesNoCancel)
      Select Case Mz
      Case vbCancel 'возврат на ввод категории
        Cancel = True: TextBox7.SetFocus
      Case vbNo 'закрыть форму
        Unload Me
      Case vbYes 'игнорировать совпадение
      Mz = vbNo: Exit Sub
      End Select
      Exit For
    End If
  Next
End If
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
0 Mz = vbNo
End Sub

Private Sub CommandButton1_Click()
Dim Ar, I As Integer, N As Integer
Ar = Array(1, 2, 7, 4, 6, 5, 8) 'продолжить массив номерами по порядку следования текстбоксов
N = LastN:
If N = 3 Then  'пустая таблица
Mz = MsgBox("Таблица пустая! Будете заполнять?" & vbCrLf & _
"Да - идём на добавление данных" & vbCrLf & _
"Нет - закрыть форму" & vbCrLf, vbYesNo)
If Mz = vbNo Then Unload Me: Exit Sub
End If
For I = 1 To UBound(Ar) + 1
  Cells(N + 1, I) = Me.Controls("TextBox" & Ar(I - 1))
  Me.Controls("TextBox" & Ar(I - 1)) = ""
Next
TextBox1.Enabled = True
Me.TextBox1 = Cells(N + 1, 1) + 1
TextBox1.Enabled = False
End Sub
[/vba]
 
Ответить
СообщениеДобрый день, скажите пожалуйста, как на данной форме сделать так, что при нажатии на ENTER или TAB заполнение записи было друг за другом? Сейчас получается что заполнение записи идет по порядку только до 4 строки заполнения, а дальше в разброс. Форма по ссылке Внешняя ссылка удалена администрацией - это нарушение п.3 Правил форума

Код:
[vba]
Код
Dim Mz As Integer

Private Sub TextBox1_Change()
TextBox1.Enabled = False
TextBox2.SetFocus
End Sub
Sub TextBox7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim B ' As Long
If Mz = vbNo Then Mz = vbYes: Exit Sub
N = LastN
B = Me.Controls("TextBox7")
If Not IsNumeric(B) Then
  MsgBox "ВВедите код профессии (число больше нуля)!"
  Cancel = True: TextBox7.SetFocus: Exit Sub
Else
  B = Val(B)
End If
Mz = vbYes
If B > 0 Then
  For I = 4 To N
    If B = Cells(I, 3) Then
      Mz = MsgBox("Такая запись уже существует! Продолжить?" & vbCrLf & _
      "Да - игнорировать совпадения" & vbCrLf & _
      "Нет - закрыть форму" & vbCrLf & _
      "Отмена - остаемся на вводе кода", vbYesNoCancel)
      Select Case Mz
      Case vbCancel 'возврат на ввод категории
        Cancel = True: TextBox7.SetFocus
      Case vbNo 'закрыть форму
        Unload Me
      Case vbYes 'игнорировать совпадение
      Mz = vbNo: Exit Sub
      End Select
      Exit For
    End If
  Next
End If
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
0 Mz = vbNo
End Sub

Private Sub CommandButton1_Click()
Dim Ar, I As Integer, N As Integer
Ar = Array(1, 2, 7, 4, 6, 5, 8) 'продолжить массив номерами по порядку следования текстбоксов
N = LastN:
If N = 3 Then  'пустая таблица
Mz = MsgBox("Таблица пустая! Будете заполнять?" & vbCrLf & _
"Да - идём на добавление данных" & vbCrLf & _
"Нет - закрыть форму" & vbCrLf, vbYesNo)
If Mz = vbNo Then Unload Me: Exit Sub
End If
For I = 1 To UBound(Ar) + 1
  Cells(N + 1, I) = Me.Controls("TextBox" & Ar(I - 1))
  Me.Controls("TextBox" & Ar(I - 1)) = ""
Next
TextBox1.Enabled = True
Me.TextBox1 = Cells(N + 1, 1) + 1
TextBox1.Enabled = False
End Sub
[/vba]

Автор - DKeT
Дата добавления - 15.05.2019 в 12:56
boa Дата: Среда, 15.05.2019, 13:46 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 559
Репутация: 167 ±
Замечаний: 0% ±

365
DKeT,
при нажатии на ENTER или TAB заполнение записи было друг за другом?
Наверное вы имели ввиду переход к следющему полю?
Тогда вам в помощь свойство объектов формы TabIndex

Расставьте нужную последовательность переходов от 0 и до ...
К сообщению приложен файл: 1372678.jpg (54.8 Kb)




Сообщение отредактировал boa - Среда, 15.05.2019, 13:48
 
Ответить
СообщениеDKeT,
при нажатии на ENTER или TAB заполнение записи было друг за другом?
Наверное вы имели ввиду переход к следющему полю?
Тогда вам в помощь свойство объектов формы TabIndex

Расставьте нужную последовательность переходов от 0 и до ...

Автор - boa
Дата добавления - 15.05.2019 в 13:46
DKeT Дата: Среда, 15.05.2019, 14:23 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 3 ±
Замечаний: 20% ±

Excel 2007
boa, Спасибо за помощь, уже разобралась. Тема закрыта


Сообщение отредактировал DKeT - Среда, 15.05.2019, 14:24
 
Ответить
Сообщениеboa, Спасибо за помощь, уже разобралась. Тема закрыта

Автор - DKeT
Дата добавления - 15.05.2019 в 14:23
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!