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

DateDiff и DateTimePicker

20.06.2011, 00:04. Показов 3535. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru