Excel: if/then?

Программирование на Visual Basic for Applications
Dara
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 11.11.2004 (Чт) 16:32

Excel: if/then?

Сообщение Dara » 11.11.2004 (Чт) 17:04

С 9-ти часов мучаюсь:
Есть колонка RecentAktivities (RA) и колонка Date (D). Надо, чтобы при внесении изменений в RA, в D обновлялась дата, если изменений нет - дата оставалась прежней.

Беда в том, что я не програмирую :(, пыталась сделать на основе функзий Excell, например: создать дополнительную колонку RA1. Если RA<>RА1, то D=today() and RА1=RА. Никак не могу задать два результата в функzии if.

Народ, если-таки придется влезать в VB, можно обяснить как для выпускника економики? :roll:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.11.2004 (Чт) 17:10

Код требуемого листа:
Код: Выделить всё
Private Sub Worksheet_Change(ByVal Target As Range)
'замени 2 на номер твоей колонки RA
'замени 3 на номер твоей колонки D
'если колонки ограничены по вертикали, надо
'ввести дополнительную проверку Target.Row
If Target.Column = 2 Then
  Cells(Target.Row, 3).Value = Now()
End If
End Sub
Lasciate ogni speranza, voi ch'entrate.

Dara
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 11.11.2004 (Чт) 16:32

Сообщение Dara » 11.11.2004 (Чт) 17:22

Долго думала. Не понятно:

1. Target означает изменения в колонке?
2. Как это дело запустить?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.11.2004 (Чт) 17:25

Как знал, как знал :)

Открыть файл. Нажать Alt+F11. Нажать Ctrl+R. Узреть дерево проекта (обычно слева). Найти там искомый лист. Даблкликнуть по нему. Вставить приведённый код в появившееся окно.

:)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dara
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 11.11.2004 (Чт) 16:32

Сообщение Dara » 11.11.2004 (Чт) 17:32

А как запустить?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.11.2004 (Чт) 17:33

Приведённый мануал является исчерпывающим :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dara
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 11.11.2004 (Чт) 16:32

Сообщение Dara » 11.11.2004 (Чт) 17:39

Согласна, тогда не работает :?
Вот что поменяла:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = AO
Then
Cells(Target.Row, D).Value = Now()
End If
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.11.2004 (Чт) 17:44

Номер...
Номер ставь...
А если буквой, то в кавычки её (их)...
Но в первом случае всё равно нужен номер.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dara
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 11.11.2004 (Чт) 16:32

Сообщение Dara » 11.11.2004 (Чт) 17:53

так?

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = [AO] Then
Cells(Target.Row, [D]).Value = Now()
End If
End Sub

А номер, это столбики считать ?
:shock:

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 11.11.2004 (Чт) 18:49

Нет, не так!
Так
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 41 Then
Cells(Target.Row, "D").Value = Now()
End If
End Sub

Ну зачем столбики считать :D
в ячейках А1 ставишь 1, в А2 - 2, выделяешь две ячейки и тащищь сколько надо, потом смотришь номер
:D
Удачи!

Dara
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 11.11.2004 (Чт) 16:32

Сообщение Dara » 11.11.2004 (Чт) 18:57

Черт, я тут совсем за день отупела

Все равно не работает

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 41 Then
Cells(Target.Row, 4).Value = Now()
End If
End Sub

Dara
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 11.11.2004 (Чт) 16:32

Сообщение Dara » 11.11.2004 (Чт) 19:00

А как грамотно на ВБ написать алгоритм:

if AO21<>AP21
then (D21=now() and AP=AO21)

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 11.11.2004 (Чт) 19:07

Private Sub Worksheet_Change(ByVal Target As Range) - вызывается самим Екселем каждый раз когда происходит редактирование ячейек листа.
If Target.Column = 41 Then - проверяется на номер столбца и ести номер столбца изменяемой ячейки равен тому, который нужен обновляем дату:
Cells(Target.Row, "D").Value = Now()
И все!

Dara писал(а):if AO21<>AP21
then (D21=now() and AP=AO21)

Что такое АО21, АР21?

Dara
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 11.11.2004 (Чт) 16:32

Сообщение Dara » 11.11.2004 (Чт) 19:28

Да, именно такой проверки хотелось. Почему ж не работает?

/if AO21<>AP21
/then (D21=now() and AP=AO21)

это с чего я начинала (сорри за бездумный copy-paste)
примерно:
if RA<>RA1
then (D=now() and RA1=RA)
, хотела создать дополн.столбик для проверки, но теперь вроде не нужно

Cells(Target.Row, "D").Value = Now() "D"заменила на 4 = N столбика

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 11.11.2004 (Чт) 19:50

Возможно отключены макросы
Меню "Сервис"->"Макрос"->"Безопасность"
средний уровень поставь

Процедура не на нужном листе вставлена
Вложения
Книга1.rar
Вот книга с примером. ячейка 5 в 4 дата
(5.59 Кб) Скачиваний: 96

AlexG
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 08.12.2003 (Пн) 15:47
Откуда: Украина, Киев

Сообщение AlexG » 12.11.2004 (Пт) 10:44

Прочитал ветку.......просто плакал....:))

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 12.11.2004 (Пт) 11:21

AlexG писал(а):просто плакал

Правильно делал, смеятся - грешно!

Кстати решил с Exchange???

Dara
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 11.11.2004 (Чт) 16:32

Сообщение Dara » 12.11.2004 (Пт) 11:24

Да, меня уже поздравили с новой серией КИСА-КУКУ. А что вы хотели от выпускницы международных отношений с русским языком как иностранный и латинской клавиатурой :P

Кому интересно - пытаюсь включить макросы

AlexG
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 08.12.2003 (Пн) 15:47
Откуда: Украина, Киев

Сообщение AlexG » 12.11.2004 (Пт) 11:30

Да нет ребят....я без издевки...:)

Просто я сунулся сюда только после того как прочитал не менее двух книг по VBA....

To Igor_123: пока не решил....я себя вольготно чувствую в VBA/Excel.....но если сунуться в чужое приложение, такое как Outlook - слаб....:)

Ниччеее выберемся.....

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 12.11.2004 (Пт) 11:45

Пример то хоть работает???

При среднем уровене будет, приоткрытии книги с макросами, задавать один из фундаментальных вопросов русской интилигенции "Что делать?".

Включила???
:)

2 AlexG так это ещё и Outlook!!! :shock:
Я думал это в Екселе!!! :(
В понедельник дам ссылку на книжки по Outlook.
Мож помогут :)

Dara
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 11.11.2004 (Чт) 16:32

Сообщение Dara » 12.11.2004 (Пт) 12:07

УррА! Заработало :D :D :D
Но не знаю, почему :roll: Макросы включила, вопрос не вылезал.

Не знаю, стоит ли читать книгу по VB, ведь сразу видно, что не мое :?

Огромное вам, ребята, спасибо.

З.Ы. И на прощание не удержалась:
если то же надо для столбика 42, то?

Private Sub Worksheet_Change1 (ByVal Target As Range)
If Target.Column = 42 Then
Cells(Target.Row, 4).Value = Now()
End If
End Sub

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 12.11.2004 (Пт) 12:15

Dara писал(а):УррА! Заработало :D :D :D
Но не знаю, почему :roll: Макросы включила, вопрос не вылезал.

Не знаю, стоит ли читать книгу по VB, ведь сразу видно, что не мое :?

Огромное вам, ребята, спасибо.

З.Ы. И на прощание не удержалась:
если то же надо для столбика 42, то?

Private Sub Worksheet_Change1 (ByVal Target As Range)
If Target.Column = 42 Then
Cells(Target.Row, 4).Value = Now()
End If
End Sub
Да ;)
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

    TopList