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

Тема в разделе "Visual Basic", создана пользователем patrooll, 24 янв 2011.

  1. patrooll

    patrooll Гость

    при нулевом значении в ячейке excel появляется дата, а не 0...
    Код (Text):
    .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: Не кидайте помидорами....
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    поставь апостроф перед данными для Value - так будет воспринимать как текст
     
  3. patrooll

    patrooll Гость

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    If Дни1 + Дни2 = 0 Then .Cells(z, 25).Value = "'0" & "/" & Часы2 + Часы1
     
  5. patrooll

    patrooll Гость

    Неа... не помогает....
    может предистория поможет..
    Есть база на acces. табель рабочего времени... прилагаю файл базы...
     

    Вложения:

  6. hosm

    hosm * so what *

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

    patrooll Гость

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

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

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

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

    patrooll Гость

    Нашел цикл....
    Код (Text):
    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 это цикл до тех пор, пока соблюдается условие... и вот какое условие надо назначить, тут я никак не пойму.....
    То-же условие, что и в примере кода?
     
  9. patrooll

    patrooll Гость

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

    patrooll Гость

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

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

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

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

    Вложения:

Загрузка...

Поделиться этой страницей