Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
 Аватар для kOS_77
196 / 188 / 9
Регистрация: 14.06.2011
Сообщений: 495

DateDiff и DateTimePicker

20.06.2011, 00:04. Показов 3550. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Только начал изучать visual Basic, так что сильно не ругайте.

Пишу небольшую программку для автоматизации заполнения и печати командировочных удостоверений и столкнулся с кучей подводных камней.

Требуется подправить и если надо объяснить...

Начну по порядку

1. Требуется вычислить количество дней от одной даты до другой. Казалось бы что может быть легче...
Использую для этого дела DateTimePicker. Вот код, который уже извращен и усложнен от первоначального...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
        Dim d1 As DateTimePicker ' Пробывал и Date но ругается что нельзя привести к Date...
        d1 = DateTimePicker1
        DateTimePicker1.CustomFormat = ("dd, m,yyyy")
        DateTimePicker1.Format = DateTimePickerFormat.Custom
        Dim d2 As DateTimePicker
        d2 = DateTimePicker2
        DateTimePicker2.CustomFormat = ("dd, mm,yyyy")
        DateTimePicker2.Format = DateTimePickerFormat.Custom
 
        Dim d3 As Integer
        d3 = DateDiff(DateInterval.Day, d1, d2) ' Ругается что date1 нельзя привести к формату Date
        MsgBox(d3) 'Здесь выводим для удобства в сообщении, а в реале вставлю в экселе в ячейку
Т.Е. по логике должны получить количество дней от d1 до d2 в виде переменной d3 ? Где ошибка и почему DateTime Picker не признается как Date ни под каким соусом?

И кстати как из DateTimePicker вытащить отдельно день, отдельно месяц и отдельно год и записать все это для каждого в свою переменную ?


2. CheckBox. Необходимо при нажатии кнопки что бы проверялось на каких CheckBox стоит галочка и копировать необходимые листы из одной книги в другую, к примеру из shablon1.xls в print.xls

С копированием листов проблем никаких нет. Проблема сделать это через CheckBox

Пробывал сделать через
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim EX As Object
        
        If CheckBox11.Checked = True Then
         EX = CreateObject("Excel.Application")
            EX.Workbooks.Open(Filename:="C:\Модуль Командировок\Shablon1.xls") ' открывает указанный файл
            EX.Workbooks.Open(Filename:="C:\Модуль Командировок\print.xls") ' открывает указанный файл
            EX.Windows("Shablon1.xls").Activate()
            EX.Sheets("Работник1").Select()   'Пишет Неверный индекс. (Исключение из HRESULT: 0x8002000B (DISP_E_BADINDEX))
            EX.Sheets("Работник1").Copy(Before:=EX.Workbooks("print.xls").Sheets(1))
        End If
 
If CheckBox11.Checked = False Then MsgBox("Галочка снята", vbCritical, )
Выдает ошибку на строке EX.Sheets("Работник1").Select() Неверный индекс. (Исключение из HRESULT: 0x8002000B (DISP_E_BADINDEX))

Пока вроде все, из за этого дальше двинутся не могу...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.06.2011, 00:04
Ответы с готовыми решениями:

DatetimePicker выбор месяца и года
Здравствуйте! Необходимо сделать выбор в DatetimePicker лишь месяца и года. У Меня их два: Выбор периода. Например, мне нужно "период...

Как сложить поля dbedit и datetimepicker и результат записался в другой datetimepicker
procedure Tpods4et.DateTimePicker1Change(Sender: TObject); var d:string; a:integer; begin a:=strtoint(dbedit4.Text); ...

Смена даты в datetimepicker при смене времени в другом поле datetimepicker
есть два поля date time picker, одно для изменения времени второе для изменения даты... нужно при попадании часов до 00 ночи, чтобы...

2
Частенько бываю
 Аватар для Vlanib
750 / 331 / 42
Регистрация: 20.06.2007
Сообщений: 854
20.06.2011, 06:23
Пункт 1
Вы тут намудрили зачем то. Всё действительно гораздо проще. Свойство Value контрола DTP возвращает выбранную дату в формате Date. Первый аргумент функции DateDiff - это необходимый вам временной интервал для расчета. Итого:
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub CommandButton1_Click()
Dim dDate1 As Date, dDate2 As Date, iDays As Integer
dDate1 = DTPicker1.Value
dDate2 = DTPicker2.Value
iDays = DateDiff("d", dDate1, dDate2)
MsgBox iDays
'Или короче ...
'MsgBox DateDiff("d", DTPicker1.Value, DTPicker2.Value)
End Sub
Вот так можно разбить дату на составляющие:
Visual Basic
1
2
3
4
Private Sub CommandButton2_Click()
MsgBox "Äåíü - " & Day(DTPicker1.Value) & vbNewLine & "Ìåñÿö - " & _
Month(DTPicker1.Value) & vbNewLine & "Ãîä - " & Year(DTPicker1.Value)
End Sub
Пункт2
Что Select, что Activate это методы, в ситаксисе которых не надо ставить (). В вашем случае строку с Select вобще надо убрать.
Я бы на вашем месте сделал бы так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
If CheckBox11.Checked = True Then
    With CreateObject("Excel.Application")
'        .EnableEvents = False
'        .ScreenUpdating = False
'        .DisplayAlerts = False
'        .Visible = True
        .Workbooks.Open "C:\print.xls"
        .Workbooks.Open "C:\Shablon.xls"
        .ActiveWorkbook.Sheets("Ðàáîòíèê1").Copy Before:=.Workbooks("Print.xls").Sheets(1)
'        .EnableEvents = True
'        .ScreenUpdating = True
'        .DisplayAlerts = True
    End With
End If
1
 Аватар для kOS_77
196 / 188 / 9
Регистрация: 14.06.2011
Сообщений: 495
20.06.2011, 21:14  [ТС]
Большое спасибо, с датами разобрался, все работает, а вот с экселем не хочет...

Добавлено через 11 минут
Тут столкнулся с такой проблемой...

если 2 файла открывать по "галочке", то галочка ставится(на фоне идет открытие-копирование листа-закрытие двух книг) минимум секунд 10... если проверяем галочку(стоит не стоит) при нажатии кнопки(что собственно логично и правильно) то тут сталкнулся с проблемкой...

строчка
Visual Basic
1
.Sheets("Иванов В.Н.").Copy(After:=.Workbooks("Print.xls").Sheets(2))
не хочет выполняться отдельно... (это уже второй Checkbox и файлы уже открыты)...
Visual Basic
1
2
3
4
5
.Workbooks.Open("C:\Модуль командировок\print.xls")
.Workbooks.Open("C:\Модуль командировок\Shablon1.xls")
.Sheets("Иванов В.Н.").Copy(After:=.Workbooks("Print.xls").Sheets(2))
.Workbooks("print.xls").close(SaveChanges:=True)
.Workbooks("shablon1.xls").close(SaveChanges:=False)
а вот так все работает.

если у меня CheckBox'ов штук 20 то я устану ждать пока двадцать раз все енто откроется и закроется...

Подскажите как можно копировать и вставлять листы с изменением в ячейках не открывая файла вообще(visible не в счет) и делать это довольно быстро...

Мне только направить, дальше я сам доковыряю...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.06.2011, 21:14
Помогаю со студенческими работами здесь

Из Datetimepicker пытаюсь вычесть Datetimepicker и получит количество дней
В общем проблема такая, пытаюсь вычесть из Datetimepicker2-Datetimepicker1, но разница в днях получается абсолютно другая, если даты...

DateDiff
здравствуйте в коде считаю секунды между датами, получаю выделение DateDiff и сообщение, argument not optional код: 'присвоение...

DateDiff
Здравствуйте! Необходимо сделать округление даты с точностью до суток. У меня вот что получилось =DateDiff("d";;). Но допустим...

DateDiff
здравствуйте в коде есть Старт_программы = Time много всего Конец_программы = Time MsgBox$ "Время обработки текста: "...

Функция DateDiff
Мне нужно составить список авторов книги которых изданы в текущем году. Использую функцию DateDiff, только она почему то не работает....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru