Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Excel 2007, Сортировка+удаление записи / 2 сообщений из 2, страница 1 из 1
11.12.2012, 19:04
    #38074763
Feriks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Excel 2007, Сортировка+удаление записи
Здраствуйте.
Есть задача -некая форма на которой расположены Textbox, Сombobox и CommandButton c парочкой Label.
Должен быть такой функционал - в Textbox вносится текст> нажимается кнопка, при которой спросится сохранить ли данную запись.
Если да, то запись добавляется в combobox и в лист Excel(у меня это столбец B), в соседнем столбце(A) ставится порядковый номер.
+Каждый раз при добавлении записи на лист весь столбец B сортируется по алфавиту, а порядковый номер не трогается.

Эту часть я сделал. Теперь combobox - при выборе записи в самом боксе, при щелчке мышки 2 раза - спросится удалить ли данную запись.
Если да, то запись удаляется из бокса/листа/номер уменьшается на 1+опять сортировка.

Вот здесь и нужна помощь - не знаю как реализовать или может какую мысль правильную найти.
Код кнопки для сохранения
Код: vbnet
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.
Dim Ok As Integer
Ok = MsgBox("Добавить?", vbOKCancel, "Добавление")
With Лист4
.Cells(1, 1).Value = TextBox1.Text
End With
' Это для проверки на временный лист
If Ok = vbOK Then
If TextBox1.Text <> "" Then
c = c + 1
' C - и есть порядковый номер занес в модуль, как глобальную - она потом еще понадобится
With Лист2
.Cells(c + 1, 1).Value = c
.Cells(c + 1, 2).Value = TextBox1.Text
End With
' Добавление записи в лист
Range("B2").Select
Selection.End(xlDown).Select
EndRow = ActiveCell.Row
ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Add Key:=Range("B2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Лист2").Sort
.SetRange Range("B1:B" & EndRow)
.Header = xlYes
.MatchCase = Yes
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Сортировка столбца B
With ThisWorkbook.Worksheets("Лист2")
ComboBox1.List = .Range(.Range("B2"), .Range("B655").End(xlDown)).Value
End With
' Добавление записи в бокс
Else
If Лист4.Cells(1, 1).Value = nil Then
MsgBox ("Поле пустое")
' Проверка Textbox
End If
End If
End If


Для процедуры двойного нажатия и удаления записи - из своих мыслей:
1)c = c - 1 ' уменьшить счетчик
ComboBox1.RemoveItem ComboBox1.ListIndex 'удалить тут же текущую запись в боксе
2)Пройтись опять по всему столбцу B и если такая сейчас в боксе для удаления выбрана, то по условию сравнению - удаляется.

Вроде все описал, форма то маленькая, а затруднительной оказалсь.
...
Рейтинг: 0 / 0
12.12.2012, 00:49
    #38075023
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Excel 2007, Сортировка+удаление записи
FeriksТеперь combobox - при выборе записи в самом боксе, при щелчке мышки 2 раза - спросится удалить ли данную запись.
Если да, то запись удаляется из бокса/листа/номер уменьшается на 1+опять сортировка.Используйте не комбо, а листбокс. Или добавьте КоммандБаттон для удаления.
Порядковый номер (который, на самом деле - код записи) не нужно уменьшать - просто удаляйте строку. При добавлении вы просто будете ставить (максимальный номер+1).
Не надо бояться, что номера будут с пропусками - всегда, когда нужно, можно в отдельном поле (столбце) пронумеровать записи заново и отдельно...
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Excel 2007, Сортировка+удаление записи / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]