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

DateDiff и DateTimePicker

20.06.2011, 00:04. Показов 3515. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru