Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Поиск возрастов по отделам / 12 сообщений из 12, страница 1 из 1
10.01.2014, 21:45
    #38522575
MrSavDre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
Задача:
1. Создать таблицу, которая содержит сведения о сотрудниках фирмы.
Структура таблицы:
- фамилия сотрудника;
- должность;
- дата рождения;
- дата поступления на работу;
- номер отдела;
- оклад.
2. Предусмотреть возможность добавления в таблицу произвольного количества строк.
3. Определить:
• возраст сотрудников (количество полных лет) при поступлении на работу и на текущее время;
• количество сотрудников заданного отдела младших Х лет (значение Х задано);
• минимальный размер оклада.
4. Создать на 2 листе книги таблицу, которая содержит сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы.
5. Сортировать данные в таблице по заданному столбцу.
6. Увеличить на Y% оклады сотрудникам, которые проработали не меньше Z лет (значение Х и Z заданы).
7. Удалить информацию о сотрудниках старше заданного возраста.

Затруднения пока вызывает только определение количества сотрудников заданного отдела младших Х лет.
Пытался решить таким образом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
For i = 2 To 100
Do While Cells(i, 5) = txtOtd
If DateDiff("yyyy", Cells(i, 3), Now) < txtLet Then
k = k + 1
End If
Loop
Next
LabelKol = k


Однако в результате даже 0 не выводит, не могу понять проблема в формате дат или в самом цикле, прошу помочь разобраться, файл приложен.
...
Рейтинг: 0 / 0
10.01.2014, 21:52
    #38522581
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
А с чего программа должна что-то выводить, если она в бесконечном цикле?
Код: vbnet
1.
2.
3.
Do While Cells(i, 5) = txtOtd

Loop



Открой для себя меню Debug - точки останова, пошаговое выполнение, просмотр переменных
...
Рейтинг: 0 / 0
10.01.2014, 22:10
    #38522595
MrSavDre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
В этот раз при измене кода, почти каждый раз приходилось перезапускать excel, не то что debug. Пытался разорвать бесконечность через
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
For i = 2 To 100
Do While Cells(i, 5) = txtOtd
Loop
If DateDiff("yyyy", Cells(i, 3), Now) < txtLet Then
k = k + 1
End If
Next
LabelKol = k


Теперь результат равен 99, дело в пустых строках?
...
Рейтинг: 0 / 0
10.01.2014, 22:14
    #38522598
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
MrSavDreВ этот раз при измене кода, почти каждый раз приходилось перезапускать excel, не то что debugОткрой для себя отладку, в том числе Ctrl+Break для прерывания выполнения макроса
...
Рейтинг: 0 / 0
10.01.2014, 22:20
    #38522606
MrSavDre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
Обязательно открою, дело оказалось не в пустых строках, а в цикле, программа до сих пор не может найти отдел сотрудника, проблема в значении текстбокса или еще что-то с датами?
...
Рейтинг: 0 / 0
10.01.2014, 22:22
    #38522607
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
MrSavDreТеперь результат равен 99, дело в пустых строках?Ты пытаешься сравнить число (которое возвращает DateDiff) с текстовой строкой, которую возвращает txtLet. Какие там неявные преобразования происходят в данном случае я даже представить себе не могу, но результат налицо. Сравнивай число с числом.
...
Рейтинг: 0 / 0
10.01.2014, 22:26
    #38522609
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
а в цикле - у тебя по-прежнему бесконечный цикл
Код: vbnet
1.
2.
Do While Cells(i, 5) = txtOtd
Loop
...
Рейтинг: 0 / 0
10.01.2014, 22:35
    #38522618
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
У вас формула вычисления возраста возвращает возраст на единицу больше, чем надо...

Кстати, придуманная как-то 13903561 мною формула - превосходит DateDiff по производительности (процентов на 15, а если вынести расчет текущей даты за цикл - на все 20):
Код: vbnet
1.
Int((Val(Format(Now, "yyyymmdd")) - Val(Format(Cells(i, 3), "yyyymmdd"))) / 10000)
...
Рейтинг: 0 / 0
10.01.2014, 22:37
    #38522620
MrSavDre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
Что-то получилось, теперь оно определяет количество сотрудников, но всех, а не из определенного отдела
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
For i = 2 To 100
Do While Cells(i, 5) = txtOtd
Loop
If CLng(DateDiff("yyyy", Cells(i, 3), Now)) < CLng(txtLet) Then
k = k + 1
End If
Next
LabelKol = k


Наверное я очень сильно исказил цикл, как сделать что бы он понимал из какого отдела следует выбирать?
...
Рейтинг: 0 / 0
10.01.2014, 22:40
    #38522625
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
ты сам понимаешь, что делает этот код?
Код: vbnet
1.
2.
Do While Cells(i, 5) = txtOtd
Loop

если нет - почитай учебник про циклы
...
Рейтинг: 0 / 0
10.01.2014, 22:41
    #38522628
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
MrSavDreкак сделать что бы он понимал из какого отдела следует выбирать?почитать учебник про
Код: plaintext
If

научиться пользоваться пошаговым выполнением кода
...
Рейтинг: 0 / 0
10.01.2014, 22:55
    #38522635
MrSavDre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск возрастов по отделам
Я мудро решил избежать всё же того чего не понимаю
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub CommandButton3_Click()
For i = 2 To 100
If CLng(DateDiff("yyyy", Cells(i, 3), Now)) < CLng(txtLet) And CLng(Cells(i, 5)) = CLng(txtOtd) Then
k = k + 1
End If
Next
LabelKol = k
End Sub


Спасибо за помощь
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Поиск возрастов по отделам / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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