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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2009, 15:42   #11
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Примерно так:
Sub Worksheet_Activate()
i = 1
Do While Cells(i, 1) <> ""
If Sheets("Лист1").Cells(i, 1).Value <> Sheets("Лист2").Cells(i, 1).Value Then GoTo 10
Sheets("Лист1").Cells(i, 3) = Val(Sheets("Лист1").Cells(i, 2)) - Val(Sheets("Лист2").Cells(i, 2))
10
i = i + 1
Loop
End Sub
pivas вне форума Ответить с цитированием
Старый 16.05.2009, 16:03   #12
sttafi
Пользователь
 
Регистрация: 12.05.2009
Сообщений: 18
По умолчанию

данный код не работает
sttafi вне форума Ответить с цитированием
Старый 16.05.2009, 16:11   #13
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Проверьте, у меня работает без проблем.
Вложения
Тип файла: rar Книга.rar (6.8 Кб, 13 просмотров)
pivas вне форума Ответить с цитированием
Старый 16.05.2009, 16:15   #14
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот так тоже будет работать:
Код:
Sub Worksheet_Activate()
    Dim cell As Range: On Error Resume Next: Application.ScreenUpdating = False
    For Each cell In Intersect(Me.Cells.SpecialCells(xlCellTypeConstants), Me.Columns(1)).Cells
        If cell = Sheets("Лист2").Range(cell.Address) Then cell.Next.Next = cell.Next - Sheets("Лист2").Range(cell.Address).Next
    Next cell
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 18.05.2009, 17:20   #15
sttafi
Пользователь
 
Регистрация: 12.05.2009
Сообщений: 18
По умолчанию

вроде бы все делаю так же,а ошибку найти не могу ( посмотрите пожалуйста
Вложения
Тип файла: rar пример.rar (26.6 Кб, 11 просмотров)
sttafi вне форума Ответить с цитированием
Старый 18.05.2009, 17:43   #16
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Странный у Вас какой-то файл...

Я заменил Ваш макрос на более простой:
Код:
Sub test()
    ' пусто
End Sub
И то, выполняется он только один раз, а при повторном запуске выдаёт ошибку 32809...
(у меня Excel 2003)

Впервые с таким сталкиваюсь. Посоветовать могу только перенести таблицы из этого файла в новый.
EducatedFool вне форума Ответить с цитированием
Старый 18.05.2009, 17:46   #17
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Вы не тот столбец отнимаете:
Sheets("Штатное расписание").Cells(i, 3) = Val(Sheets("Штатное расписание").Cells(i, 2)) - Val(Sheets("Физические лица").Cells(i, 3))
pivas вне форума Ответить с цитированием
Старый 18.05.2009, 19:06   #18
sttafi
Пользователь
 
Регистрация: 12.05.2009
Сообщений: 18
Восклицание

про столбец да...не так формулу написала ((
исправила код:
Private Sub CommandButton1_Click()
With Sheets("Штатное расписание")
i = 2
Do While Sheets("Физические лица").Cells(i, 2) <> Sheets("Штатное расписание").Cells(i, 1)

Sheets("Штатное расписание").Cells(i, 3) = Val(Sheets("Штатное расписание").Cells(i, 2)) - Val(Sheets("Физические лица").Cells(i, 3))

i = i + 1

Loop
End With
End Sub
получается, что теперь программа сравнивает только i-ую строку обеих страниц...а нужно,чтобы сравнивала каждую строку второй с каждой строкой первой...переделала следующим образом:
Private Sub CommandButton1_Click()
i = 3
j = 2
Do While Sheets("Физические лица").Cells(i, 2) <> ""
If Sheets("Физические лица").Cells(i, 2).Value = Sheets("Штатное расписание").Cells(j, 1).Value Then


Sheets("Штатное расписание").Cells(j, 3) = Val(Sheets("Штатное расписание").Cells(j, 2)) - Val(Sheets("Физические лица").Cells(i, 3))

i = i + 1
j = j + 1
End If
Loop
End Sub

теперь эксель виснет....как изменить код?
sttafi вне форума Ответить с цитированием
Старый 18.05.2009, 19:17   #19
sttafi
Пользователь
 
Регистрация: 12.05.2009
Сообщений: 18
По умолчанию

вот так эксель не виснет:
Private Sub CommandButton1_Click()
i = 3
j = 2
Do While Sheets("Физические лица").Cells(i, 2) <> ""
If Sheets("Физические лица").Cells(i, 2).Value <> Sheets("Штатное расписание").Cells(j, 1).Value Then GoTo 10


Sheets("Штатное расписание").Cells(j, 3) = Val(Sheets("Штатное расписание").Cells(j, 2)) - Val(Sheets("Физические лица").Cells(i, 3))
10
i = i + 1
j = j + 1

Loop
End Sub

но и правильно не считает ((
sttafi вне форума Ответить с цитированием
Старый 18.05.2009, 20:04   #20
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

sttafi, у Вас не совсем верно организован цикл проверки. Если подождёте чуток, попробую нарисовать.
pivas вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет суммы в DBGrid girz БД в Delphi 3 16.05.2009 14:11
подсчет ячеек в зависимости от даты Алексей777 Microsoft Office Excel 4 20.02.2009 13:48
Подсчет суммы Kardi PHP 0 23.11.2008 16:46
Удалить строку листа Excel при выполнении условия Gennady Microsoft Office Excel 14 18.12.2007 13:54