Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2012, 03:36   #1
alyam
Пользователь
 
Регистрация: 19.04.2011
Сообщений: 13
По умолчанию excel, Sub Worksheet_SelectionChange()

суть программы состоит: при изменении ячейки идет подсчет на другом листе+небольшая функция поиска.
Мне принесли картридж на заправку, у него есть определенный номер от 1 до 100. Я ввел в соответствующее поле значение "Заправка". После заправки отдаю пользователю, записываю в какой отдел заправленный картридж отправлен. В своде веду отчет по месяцам. Все.

Сама программа работает нормально, если корректно вносить изменения. Но доставляют неудобства следующие два момента:
когда очищаешь ячейку возникает ошибка несоответствия типов, при копировании ячеек возникает ошибка и вычисления не производятся.

функция Worksheet_selectionChange нужна для случая, если вдруг пользователь меняет значение уже заполненной ячейки. Нужно запоминать предыдущее значение, т.е. до внесения изменений.

В вложении файлик с защитой листа без пароля.

Код:
Dim varOldValue As Variant
Dim varNewValue As Variant

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
varOldValue = Target.Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Set Rng1 = Worksheets("Свод").Range("B4:B16")
Set Rng2 = Worksheets("Свод").Range("C3:N3")

For Each varNewValue In Target
Set poz1 = Rng1.Find(What:=varNewValue, LookAt:=xlWhole, SearchOrder:=xlByRows)
Set poz2 = Rng2.Find(What:=Cells(varNewValue.Row, varNewValue.Column + 1).Text, LookAt:=xlWhole, SearchOrder:=xlByColumns)
Set poz3 = Rng1.Find(What:=varOldValue, LookAt:=xlWhole, SearchOrder:=xlByRows)

If varOldValue <> "" Then
Worksheets("Свод").Cells(poz3.Row, poz2.Column).Value = Worksheets("Свод").Cells(poz3.Row, poz2.Column).Value - 1
End If

Worksheets("Свод").Cells(poz1.Row, poz2.Column).Value = Worksheets("Свод").Cells(poz1.Row, poz2.Column).Value + 1
varOldValue = varNewValue
Next varNewValue

End Sub
Вложения
Тип файла: rar журнал учета картриджей.rar (24.6 Кб, 19 просмотров)

Последний раз редактировалось alyam; 12.01.2012 в 03:58.
alyam вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальная переменная = 0 в Worksheet_SelectionChange smbd Microsoft Office Excel 8 14.03.2011 15:03
непонятки gling Microsoft Office Excel 8 05.01.2011 21:25
непонятки с if mrgrudge PHP 2 05.10.2010 12:01
Непонятки в делфи Aleksey1989 Помощь студентам 4 17.09.2010 13:54