Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/107: Рейтинг темы: голосов - 107, средняя оценка - 4.97
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249

Форма для ввода, поиска и редактирования таблицы excel

01.08.2013, 12:06. Показов 22340. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем хорошего настроения!

Есть таблица, сделал форму для ввода данных. Необходимо чтобы при вводе данных в TextBox1 происходил поиск из первого столбца и после соответствия выводил в Textbox2 и TextBox3 значения этой строки соответственно из столбца 2 и 3, но не просто, а для редактирования. При нажатии кнопки Cange Record данные в искомой строке должны измениться.
Форма сейчас работает только на ввод, помогите с кодом поиска и редактирования.
Вложения
Тип файла: rar Data Table With Input Userform.rar (20.6 Кб, 320 просмотров)
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2013, 12:06
Ответы с готовыми решениями:

Открытая для редактирования форма в Excel
Можно ли в Excel создать форму так, чтобы она была открыта и пользователь имел бы доступ к редактированию листа???

Форма ввода в ввиде Таблицы Excel или Word
Стоит задача организовать форму ввода и редактирования базы данных в виде документа Word или таблицы Excel. Такая необходимость возникла...

Вот есть форма календаря для ввода дат, а для ввода времени?
Не ткнете, где взять можно??? Или может кодом кто поделится? Нужно часы и минуты выбирать из формы..... Как сделать - не согу...

48
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
20.10.2015, 11:03
Студворк — интернет-сервис помощи студентам
pashulka, спасибо, Ваш код работает...
Мне нужно помочь с пониманием алгоритма программы, путаюсь, а значит не понимаю какая за чем идет опись действия...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Private Sub UserForm_Initialize()
Me.ComboBox1.SetFocus
    With ComboBox1
         .Clear
         .Style = fmStyleDropDownList
         For iRow = 11 To Cells(Rows.Count, 3).End(xlUp).Row Step 2
             .AddItem Cells(iRow, 3)
         Next
         .ListIndex = -1
    End With
    With ComboBox2
         .Clear
         .Style = fmStyleDropDownList
         .Column = Range("D10:AH10").Value
         .ListIndex = -1
    End With
End Sub
 
Private Sub cbCancel_Click()
Unload Me
End Sub
 
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex > -1 And ComboBox2.ListIndex > -1 Then SetTime
End Sub
 
Private Sub TextBox1_Change()
If Len(Me.TextBox1.Value) > 4 Then
Me.TextBox2.SetFocus
Else
If Len(Me.TextBox1.Value) = 2 Then Me.TextBox1.Value = Me.TextBox1.Value & ":"
End If
UpTime
End Sub
 
Private Sub ComboBox2_Change()
If ComboBox1.ListIndex > -1 And ComboBox2.ListIndex > -1 Then SetTime
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = 0
Me.TextBox1.SelLength = 5
End Sub
 
Private Sub TextBox2_Change()
If Len(Me.TextBox2.Value) >= 5 Then
'MsgBox "Error"
cbForward.SetFocus
Else
If Len(Me.TextBox2.Value) = 2 Then Me.TextBox2.Value = Me.TextBox2.Value & ":"
End If
UpTime
End Sub
 
Private Sub SetTime()
    With Columns(3).Find(ComboBox1, , xlValues, xlWhole)
         TextBox1 = Format(.Cells(1, ComboBox2.ListIndex + 2), "HH:MM")
         TextBox2 = Format(.Cells(2, ComboBox2.ListIndex + 2), "HH:MM")
    End With
End Sub
 
Private Sub UpTime()
Me.TextBox1 = Format(Range("D11").Value, "hh:mm")
Me.TextBox2 = Format(Range("D12").Value, "hh:mm")
End Sub
1. Не могу изменить|записать значение в TextBox!
2. При переводе фокуса на TextBox - как выделять весь текст в нем для замены?

Добавлено через 52 минуты
Вообщем неправильно я делаю, нужна помощь!(
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
20.10.2015, 12:09
Другой взгляд на Вашу задачу
Вложения
Тип файла: zip myTabel_Form.zip (20.0 Кб, 79 просмотров)
1
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
20.10.2015, 12:43
pashulka, с dtpicker классно Вы придумали, решение супер...
Но думаю сам элемент в моем случае не подходит, для быстрого ввода не подходит, на НН : ММ лишний раз остановка, или выделение мышью...
У меня структура таблицы сменилась, я сделал ее в точности как в своем табеле, тут разница в шаге по дням месяца, т.е. по столбцам, можно добавить?
Visual Basic
1
2
3
4
5
6
Private Sub SetTime()
    With Columns(3).Find(ComboBox1, , xlValues, xlWhole)
         TextBox1 = Format(.Cells(1, ComboBox2.ListIndex + 2), "HH:MM") ' - тут
         TextBox2 = Format(.Cells(1, ComboBox2.ListIndex + 3), "HH:MM") ' - и тут
    End With
End Sub
Запустите табель(форму), чего то удаляется значение полученного времени в TexBox2
Вложения
Тип файла: rar Tabel_Form.rar (23.9 Кб, 18 просмотров)
0
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
20.10.2015, 12:57
pashulka, переделал по Вашему примеру, вот что получилось...
Там есть в коде в комментариях вопросы, вернее почему так и как выйти из положения?
Вложения
Тип файла: zip Tabel_Form.zip (23.4 Кб, 28 просмотров)
0
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
21.10.2015, 08:00
Как увеличить значение ComboBox2 на +1?
ComboBox2.ListIndex = + 1 не работает! Вернее ставит но целым числом, снова нужен цикл?

Добавлено через 17 минут
Додумался)
Visual Basic
1
ComboBox2.ListIndex = ComboBox2.ListIndex + 1
Проблема осталась только тут, нужно решение..., не могу сам найти...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub GetTime()
    With Columns(3).Find(ComboBox1, , xlValues, xlWhole)
         TextBox1 = Format(.Cells(1, ComboBox2.ListIndex + 2), "HH:MM") '-êàê ñäåñü äîáàâèòü øàã äâèæåíèÿ ïî ñòðîêå?
         TextBox2 = Format(.Cells(1, ComboBox2.ListIndex + 3), "HH:MM") '-êàê ñäåñü äîáàâèòü øàã äâèæåíèÿ ïî ñòðîêå?
    End With
End Sub
 
Private Sub SetTime()
    With Columns(3).Find(ComboBox1, , xlValues, xlWhole)
         .Cells(1, ComboBox2.ListIndex + 2) = TextBox1 '-êàê ñäåñü äîáàâèòü øàã äâèæåíèÿ ïî ñòðîêå?
         .Cells(1, ComboBox2.ListIndex + 3) = TextBox2 '-êàê ñäåñü äîáàâèòü øàã äâèæåíèÿ ïî ñòðîêå?
    End With
    ComboBox2.ListIndex = ComboBox2.ListIndex + 1
    Me.TextBox1.SetFocus
    Me.TextBox1.SelStart = 0
    Me.TextBox1.SelLength = 5
End Sub
Добавлено через 18 часов 27 минут
не смог найти решения, нужна помощь...
0
Ушел с CyberForum совсем!
874 / 183 / 25
Регистрация: 04.05.2011
Сообщений: 1,020
Записей в блоге: 110
21.10.2015, 08:20
Цитата Сообщение от mostApi Посмотреть сообщение
'-ГЄГ*ГЄ ñäåñü äîáГ*ГўГЁГІГј ГёГ*ГЈ äâèæåГ*ГЁГї ГЇГ® ñòðîêå?
а по-русски можно ?
0
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
21.10.2015, 09:04
Да, можно) - нужен шаг:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub GetTime()
    With Columns(3).Find(ComboBox1, , xlValues, xlWhole)
         TextBox1 = Format(.Cells(1, ComboBox2.ListIndex + 2), "HH:MM") '<- здесь!
         TextBox2 = Format(.Cells(1, ComboBox2.ListIndex + 3), "HH:MM") '<- здесь!
    End With
End Sub
 
Private Sub SetTime()
    With Columns(3).Find(ComboBox1, , xlValues, xlWhole)
         .Cells(1, ComboBox2.ListIndex + 2) = TextBox1 '<- здесь!
         .Cells(1, ComboBox2.ListIndex + 3) = TextBox2 '<- здесь!
    End With
- чтобы понять зачем шаг, откройте таблицу...
Вложения
Тип файла: zip Tabel_Form_exvba.zip (32.1 Кб, 26 просмотров)
0
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
21.10.2015, 09:24
Шаг через 2 столбца!
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
21.10.2015, 09:48
Visual Basic
1
2
ComboBox2.ListIndex * 3 + 2
ComboBox2.ListIndex * 3 + 3
1
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
21.10.2015, 10:21
pashulka, гений!)
Форма работает как нужно...
Еще вопрос: при вводе времени не происходит проверка на ввод именно в формате времени, т.е. я могу написать 66:66 и т.д., как можно это сделать?
На кнопку Forward повесить как проверку перед записью, или в коде ввода в TexBox?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub TextBox1_Change()
'Dim tString As String
'On Error GoTo ErrMsg
With TexBox1
If Len(Me.TextBox1.Value) > 4 Then
Me.TextBox2.SetFocus
Me.TextBox2.SelStart = 0
Me.TextBox2.SelLength = 5
Else
If Len(Me.TextBox1.Value) = 2 Then Me.TextBox1.Value = Me.TextBox1.Value & ":"
End If
'tString = Me.TextBox1.Value
'Me.TextBox1.Value = Format(TimeValue(tString), "hh:mm")
End With
Exit Sub
'ErrMsg:
'MsgBox "Ошибка ввода данных в формате времени!", vbOKOnly, "Unexpected entry"
End Sub
- что-то типа такого...
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
21.10.2015, 10:29
Если бы Вы воспользовались DTPicker, где переход от часов к минутам, можно осуществить простым нажатием клавиши LEFT, то не пришлось бы проверять правильность ввода данных с помощью VB(A) функции IsDate()
1
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
21.10.2015, 11:32
pashulka, с DTPicker неудобно...
Столкнулся с проблемой!
Формат ячейки Excel = hh:mm, в строке формул отображается как hh:mm:ss, при этом когда забиваешь как у меня в hh:mm - форма заводит как 07:00, а в ячейке должно быть 7:00..., отсюда формула ошибается и ставит знаки ###.
Так же, когда удаляешь введенное значение времени, оставляешь якобы пустые ячейки из формы, Эксель в формуле пишет ###.
На листе правишь якобы чистые ячейки, становишься на них и удаляешь - все норм, формула светит 0.
Есть выход из ситуации? Или это координально меняет код?

Добавлено через 10 минут
Я вышел из положения, сделал так и работает как нужно:
Visual Basic
1
2
         .Cells(1, ComboBox2.ListIndex * 3 + 3) = TextBox1 + ":00"
         .Cells(1, ComboBox2.ListIndex * 3 + 4) = TextBox2 + ":00"
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
21.10.2015, 11:41
Если хотите, чтобы на экране вместо 07:00 было 7:00 , то установите формат ч:мм (h:mm)

Но проблема не в формате, в том, что TextBox (в отличии от DTPicker) возвращает текст, поэтому, после проверки правильности ввода - нужно CDate(TextBox1) или TimeValue(TextBox1)
0
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
21.10.2015, 14:46
pashulka, проблема не в отображении значения времени в textbox, а при записи...
Уже решил, спасибо...
Осталось 2 вопроса:
1. Проверка на ввод времени актуальна!
2. В ComboBox2 залетает список дат в формате: 1/1/2015, т.е. mm/dd/yyyy, как задать dd?
Перепробовал кучу примеров - не работает!
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
21.10.2015, 16:18
1) Так Вы читайте внимательней, IsDate()

Visual Basic
1
2
MsgBox IsDate("66:66") 'False
MsgBox IsDate("16:46") 'True
2) Eсли в ячейке дата (или хотя бы текст, который может быть преобразован к этому типу), то сие будет работать :

Visual Basic
1
2
MsgBox Day("1/20/2015")
MsgBox Format("1/20/2015", "dd")
0
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
21.10.2015, 17:07
Visual Basic
1
2
3
    With ComboBox2
         .Value = Format("mm/dd/yyyy", "dd")
End With
- не работает!
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
21.10.2015, 17:13
Не смешно ...

Visual Basic
1
ComboBox2 = Format(ComboBox2, "dd")
или

Visual Basic
1
2
3
With ComboBox2
     .Value = Format(.Value, "dd")
End With
0
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
22.10.2015, 07:59
pashulka, да, под вечер просто подставил...
Согласен, не смешно...
Но и так не работает: "
Цитата Сообщение от pashulka Посмотреть сообщение
.Value = Format(.Value, "dd")
Изображения
 
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
22.10.2015, 09:04
Если Вы заменили числа в десятой строке на даты, но хотите загрузить в ComboBox2 именно дни, то как говорилось ранее :

Visual Basic
1
2
3
For iColumn = 4 To Cells(10, Columns.Count).End(xlToLeft).Column Step 3
    .AddItem Day(Cells(10, iColumn))  'Format(Cells(10, iColumn), "dd")
Next
Вложения
Тип файла: zip Example_Day.zip (9.5 Кб, 43 просмотров)
1
 Аватар для mostApi
8 / 6 / 0
Регистрация: 15.05.2015
Сообщений: 350
22.10.2015, 09:56
pashulka, - просто я не подумал, что задавать формат нужно еще при формировать выпадающего списка...

Как задать кнопке "Крестик" - закрыть форму, выполнение команды как и кнопки "Cancel"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2015, 09:56

Форма ввода в виде таблицы
Добрый день. Подскажите пожалуйста, как мне создать форму ввода данных в вите таблички. У меня в бд есть таблицы...

Excel: форма ввода данных в таблицу
Доброго времени суток! Но форуме в первый раз, так что извините, если что не так. Мне нужно быстро заполнять таблицу в экселе, через...

Форма ввода данных в связанные таблицы
Есть схема данных (см. картинки). Первая картинка - все данные, вторая - нужные для формы ввода. Надо сделать форму ввода, через которую...

Не открывается форма для редактирования
При попытке открыть для редактирования первую форму, выкидывает такая ошибка. Но при компиляции все нормально и даже ее открывает без...

Форма только для редактирования.
Возникла такая проблема, посоветуйте пожалуйста, как ее лучше решить: Есть Frameset с двумя Frame, в левом View в правом Form. При...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru