Страница 1 из 1
Индикация ввода данных?
Добавлено: 06 авг 2013, 21:43
Maktub
Возможно ли средствами VBA сделать индикацию ввода данных в ячейки? Например в одном столбце появляются данные посредством макроса, а во втором, третьем и четвертом цифры означающие порядковый номер появления данных. Картинку прикрепил.
Re: Индикация ввода данных?
Добавлено: 06 авг 2013, 23:13
Naeel Maqsudov
Легко
Код: Выделить всё
Function getId(Optional Start) As Long
'генератор последовательных значений
Static X As Long
If IsMissing(Start) Then X = X + 1 Else X = Start - 1
getId = X
End Function
Sub resetid()
'процедура сброса генератора в 1
getId (1)
End Sub
Sub SaveId(ACell As Range, Width As Long)
'процедура сохранения индикатора справа от ячейки ACell в таблицу, шириной Width колонок
Dim i As Long
Set ACell = ACell.Cells(1, 1)
For i = 1 To Width
If IsEmpty(ACell.Offset(0, i)) Then
ACell.Offset(0, i).Value = getId()
Exit For
End If
Next
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'обработчик события Change на листе. Если интерактивно или
'макросом меняются целевые ячейки, то она вписывает индикатор
Select Case Target.Address(False, False)
Case "B1", "B2", "B3", "B4", "B5", "B11", "B12", "B13", "B14", "B15"
SaveId Target, 4
Case "A1"
resetid
End Select
End Sub
Sub test()
'проверка работы всего этого хозяйства.
'Впишем числа в целевые ячейки и посмотрим, что будет
[b1] = 100
[b2] = 101
[b4] = 102
[b1] = 103
[b4] = 104
[b3] = 105
End Sub
UPD:
При вводе значений в A1 счётчик сбрасывается и индикаторы снова начинаются с 1
Re: Индикация ввода данных?
Добавлено: 07 авг 2013, 00:44
pashulka
Если столбец A предполагается заполнять по одной ячейке, то можно также попробовать что-то вроде нижеприведенного кода,
правда там "ширина" таблицы индикации не ограничена тремя столбцами, ибо непонятно что должно произойти, когда количество вводов чисел превысит количество ячеек в этой таблице ...
Код: Выделить всё
Private Sub Worksheet_Change(ByVal Target As Excel.Range) 'Excel 97-2003
Dim iSource As Range
Set iSource = Intersect(Target, [A2:A6])
If Not iSource Is Nothing Then
If Application.Count(iSource) > 0 Then '.CountA(iSource)
Application.EnableEvents = False
Cells(Target.Row, 256).End(xlToLeft)(1, 2) = Application.Max([B2:IV6]) + 1
'Target.Range("IV1").End(xlToLeft)(1, 2) = Application.Max(Range("B2:IV6")) + 1
Application.EnableEvents = True
End If
End If
End Sub
Re: Индикация ввода данных?
Добавлено: 07 авг 2013, 08:54
Maktub
Большое спасибо, буду пробовать.
Не ожидал что так оперативно и так подробно мне ответят.А по поводу сброса значений попробую решить сам.