• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Ошибка при нулевом значении

  • Автор темы patrooll
  • Дата начала
P

patrooll

при нулевом значении в ячейке excel появляется дата, а не 0...
Код:
.Cells(z + 2, 21).Value = Часы2 + Часы1
.Cells(z, 25).Value = Дни1 + Дни2 & "/" & Часы2 + Часы1
If Дни1 + Дни2 = 0 Then .Cells(z, 25).Value = "0" & "/" & Часы2 + Часы1

Последняя строчка написана что-бы предотвратить появление, к примеру, "апр.34", но почему-то не помогает....
Должно быть "0/34"
:facepalm: Не кидайте помидорами....
 
H

hosm

поставь апостроф перед данными для Value - так будет воспринимать как текст
 
P

patrooll

поставь апостроф перед данными для Value - так будет воспринимать как текст

А можно на примере ?
Скопируйте мой код и отредактируйте пожалуйста.....
Я не программист и все мои зачатки разумения по ВБ из школьной программы 90-х годов по Бейсику...
 
H

hosm

If Дни1 + Дни2 = 0 Then .Cells(z, 25).Value = "'0" & "/" & Часы2 + Часы1
 
P

patrooll

If Дни1 + Дни2 = 0 Then .Cells(z, 25).Value = "'0" & "/" & Часы2 + Часы1
Неа... не помогает....
может предистория поможет..
Есть база на acces. табель рабочего времени... прилагаю файл базы...
 

Вложения

  • working_hours.zip
    186,4 КБ · Просмотры: 137
H

hosm

или можно так:
If Дни1 + Дни2 = 0 Then
.Cells(z, 25).NumberFormat = "@" ' явно указать текстовый формат и задать значение
.Cells(z, 25).Value = "0" & "/" & Часы2 + Часы1
end if
может, аналогичное добавить надо и для этих строк
.Cells(z + 2, 21).Value = Часы2 + Часы1
.Cells(z, 25).Value = Дни1 + Дни2 & "/" & Часы2 + Часы1
 
P

patrooll

Ок... нашел причину..
как всегда причина-кривые руки... Хотя я предупреждал...
А можно охаметь вконец? :gifts:

В коде реализован вывод всего табеля с шапкой и подписью.... а не подскажите как изменить код, что-бы на каждом листе было всего по 6 работников?
шапка
6 работников
подписи..

опять же.... я так понял надо где-то что-то зациклить...
;)

P.S.Не думал, что на 4-м десятке придется лезть в детство((
P.P.S. Дайте водички попить, а то так есть хочется, что и переночевать негде....
 
P

patrooll

Нашел цикл....
Код:
While Not (rst.EOF)
Set КалендарьРаботника = СоздатьКалендарьРаботника(rst.Fields("ID"))
K = K + 1
.Range(.Cells(z, 1), .Cells(z + 3, 1)).Merge
.Cells(z, 1).Value = K
.Range(.Cells(z, 2), .Cells(z + 3, 2)).Merge
.Cells(z, 2).Value = rst.Fields("ФИО") & Chr(10) & rst.Fields("Должность")
.Range(.Cells(z, 3), .Cells(z + 3, 3)).Merge
.Cells(z, 3).Value = rst.Fields("ТабНомер")
For X = 1 To 15
.Cells(z, 3 + X).Value = КалендарьРаботника(CStr(X))
If КалендарьРаботника(CStr(X)) = "Я" Then .Cells(z + 1, 3 + X).Value = 8: Дни1 = Дни1 + 1: Часы1 = Часы1 + 8
If КалендарьРаботника(CStr(X)) = "Х" Then .Cells(z + 1, 3 + X).Value = "Х"
.Cells(z + 2, 3 + X).Value = КалендарьРаботника(CStr(X + 15))
If КалендарьРаботника(CStr(X + 15)) = "Я" Then .Cells(z + 3, 3 + X).Value = 8: Дни2 = Дни2 + 1: Часы2 = Часы2 + 8
If КалендарьРаботника(CStr(X + 15)) = "Х" Then .Cells(z + 3, 3 + X).Value = "Х"
Next X
.Cells(z + 2, 19).Value = КалендарьРаботника(CStr(31))
If КалендарьРаботника(CStr(31)) = "Я" Then .Cells(z + 3, 19).Value = 8: Дни2 = Дни2 + 1: Часы2 = Часы2 + 8
If КалендарьРаботника(CStr(31)) = "Х" Then .Cells(z + 3, 19).Value = "Х"

.Cells(z, 19).Value = "Х"
.Cells(z + 1, 19).Value = "Х"

.Cells(z, 20).Value = Дни1
.Cells(z + 1, 20).Value = Часы1

.Cells(z + 2, 20).Value = Дни2
.Cells(z + 3, 20).Value = Часы2

.Range(.Cells(z, 21), .Cells(z + 1, 21)).Merge
.Cells(z, 21).Value = Дни1 + Дни2
.Range(.Cells(z + 2, 21), .Cells(z + 3, 21)).Merge
.Cells(z + 2, 21).Value = Часы2 + Часы1
.Cells(z, 25).NumberFormat = "@"
.Cells(z, 25).Value = Дни1 + Дни2 & "/" & Часы2 + Часы1
If Дни1 + Дни2 = 0 Then .Cells(z, 25).Value = "'0/" & Часы2 + Часы1


For X = 0 To 3
.Range(.Cells(z + X, 23), .Cells(z + X, 24)).Merge
.Range(.Cells(z + X, 27), .Cells(z + X, 28)).Merge
.Range(.Cells(z + X, 30), .Cells(z + X, 31)).Merge
Next X

With .Range(.Cells(z, 1), .Cells(z + 3, 34))
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlVAlignCenter
.Font.Size = 8
For X = 7 To 12
.Borders(X).Weight = xlThin
Next X
For X = 8 To 9
.Borders(X).Weight = xlMedium
Next X
End With
.Range(.Cells(z + 1, 4), .Cells(z + 1, 19)).Borders(9).Weight = xlMedium
.Range(.Cells(z - 1, 1), .Cells(z - 1, 34)).Borders(9).Weight = xlMedium

z = z + 4
Дни1 = 0: Дни2 = 0: Часы1 = 0: Часы2 = 0:
rst.MoveNext
Wend

Вверху и внизу этого цикла создание соответственно шапки и подписей...
И вот вопрос...
как можно изменить цикличность, что-бы данные работников были по 6 человек....

Я так понимаю, как это выглядит сейчас (схематично)

Создание шапки
Создание таблицы
Цикл заполнение данными (While Wend)
Создание подписей

А если, например зациклить по другому....
Например Цикл заполнения данными зациклить (For Next), а перед созданием шапки ипосле создания подписей поставить (While Wend)?
Если я правильно понял, то логически все верно, но насколько я понял While это цикл до тех пор, пока соблюдается условие... и вот какое условие надо назначить, тут я никак не пойму.....
То-же условие, что и в примере кода?
 
P

patrooll

P.S. Боже... как не хватает GOTO "номер строки"...................................
 
P

patrooll

Вот и все....даже немного грустновато..... табель на работе приняли в тестовую эксплуатацию...

Для всех кто будет искать выложу доведенный ПОД КОНКРЕТНУЮ ЗАДАЧУ НА КОНКРЕТНОМ ПРЕДПРИЯТИИ, Табель учета рабочего времени.

Описание.
Access не хранит результат. В процессе работы создается файл excel, в котором и находится выходная форма. В Базе хранятся данные работников, код вида оплаты и т.д.
Есть возможность менять название предприятия и Структурное подразделение, но я эту опцию не стал отрабатывать, поскольку не было необходимости... При желании есть возможность в 3-4 минуты исправить.
В Общем Спасибо за дельные советы....

Тему можно закрыть.
 

Вложения

  • working_hours.zip
    292,3 КБ · Просмотры: 139
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!