Здравствуйте! Столкнулся с нетривиальной для меня задачей: нужно сделать журнал прихода/ухода. Условия: 1 пользователь - 1 файл. Файл располагается на сервере. У пользователя есть доступ к файлу. Пользователь нажимает сочетание клавиш, забитое в макрос. Отображается время нажатия макроса(это приход). Ещё раз - отображается время ещё раз (уход).
Макросы или формулы с итерацией для того, чтобы время не обновлялось я нашёл на этом форуме. (за что, к слову, всем огромное спасибо).
Проблема: существующая схема всегда отображает время на компьютере пользователя. Это не подходит. Нужно: при активации макроса время пишется, то, которое на сервере.
Следовательно у меня появилась идея: на сервере всегда открыт один файл (СЕРВЕР) в котором есть идущие часы в ячейке A1 (+ файл пересохраняется раз в минуту) У пользователя нет доступа к редактированию этого файла, но есть к чтению. При нажатии макроса в файле КЛИЕНТ: он обращается к ячейке A1 в файле СЕРВЕР, считывает оттуда данные и копирует их (только значения) в ячейку в файле КЛИЕНТ. При этом лист в файле КЛИЕНТ изначально запаролен, а макрос снимает защиту перед копированием и включает снова после того как завершился.
Не исключаю, что это всё полный бред. И есть куда более стройные способы добиться того же результата. А конечный результат прост: Пользователь нажал сочетание клавиш - в ячейку левее (или в ту же самую) записалось время с локального сервера. в соседней ячейке снова отобразилось текущее время. При это пользователь не может вносить изменения в ячейкам. Решённая задача есть в приложенном файле, но он полностью зависит от времени на компьютере пользователя, что не подходит.
Господа, есть мысли как это в принципе осуществить?
Здравствуйте! Столкнулся с нетривиальной для меня задачей: нужно сделать журнал прихода/ухода. Условия: 1 пользователь - 1 файл. Файл располагается на сервере. У пользователя есть доступ к файлу. Пользователь нажимает сочетание клавиш, забитое в макрос. Отображается время нажатия макроса(это приход). Ещё раз - отображается время ещё раз (уход).
Макросы или формулы с итерацией для того, чтобы время не обновлялось я нашёл на этом форуме. (за что, к слову, всем огромное спасибо).
Проблема: существующая схема всегда отображает время на компьютере пользователя. Это не подходит. Нужно: при активации макроса время пишется, то, которое на сервере.
Следовательно у меня появилась идея: на сервере всегда открыт один файл (СЕРВЕР) в котором есть идущие часы в ячейке A1 (+ файл пересохраняется раз в минуту) У пользователя нет доступа к редактированию этого файла, но есть к чтению. При нажатии макроса в файле КЛИЕНТ: он обращается к ячейке A1 в файле СЕРВЕР, считывает оттуда данные и копирует их (только значения) в ячейку в файле КЛИЕНТ. При этом лист в файле КЛИЕНТ изначально запаролен, а макрос снимает защиту перед копированием и включает снова после того как завершился.
Не исключаю, что это всё полный бред. И есть куда более стройные способы добиться того же результата. А конечный результат прост: Пользователь нажал сочетание клавиш - в ячейку левее (или в ту же самую) записалось время с локального сервера. в соседней ячейке снова отобразилось текущее время. При это пользователь не может вносить изменения в ячейкам. Решённая задача есть в приложенном файле, но он полностью зависит от времени на компьютере пользователя, что не подходит.
Господа, есть мысли как это в принципе осуществить?nulun
Тут помню недавно время с амариканского сайта тянули (по временной зоне) - можно это использовать. Вот только месяц там был текстом по английски - вот эту проблему и решали. Можно использовать. Если кто-то поможет тему найти, или код Какой сайт - не помню. Ни форум, ни сервер времени... Хотя этих серверов теперь... Если конечно всегда доступен интернет. Но поиск по "сервер времени vba" выдаёт первую ссылку на эту тему.
Тут помню недавно время с амариканского сайта тянули (по временной зоне) - можно это использовать. Вот только месяц там был текстом по английски - вот эту проблему и решали. Можно использовать. Если кто-то поможет тему найти, или код Какой сайт - не помню. Ни форум, ни сервер времени... Хотя этих серверов теперь... Если конечно всегда доступен интернет. Но поиск по "сервер времени vba" выдаёт первую ссылку на эту тему. Hugo
Function Time_Inet() As Date Dim dt As Date, sHTMLBody As String sURL = "http://wwp.greenwichmeantime.com/time/scripts/clock-8/x.php" On Error Resume Next Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") With oXMLHTTP .Open "GET", sURL, False .send sHTMLBody = .responsetext End With dt = 25569 + Val(sHTMLBody) / 86400000 Set oXMLHTTP = Nothing Time_Inet = dt End Function
[/vba]
Мой код то поменьше будет
Цитата
Вот только месяц там был текстом по английски
Надо знать,где просить
Время по Гринвичу [vba]
Код
Function Time_Inet() As Date Dim dt As Date, sHTMLBody As String sURL = "http://wwp.greenwichmeantime.com/time/scripts/clock-8/x.php" On Error Resume Next Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") With oXMLHTTP .Open "GET", sURL, False .send sHTMLBody = .responsetext End With dt = 25569 + Val(sHTMLBody) / 86400000 Set oXMLHTTP = Nothing Time_Inet = dt End Function
Не очень понял о какой базе идёт речь. SQL вроде бы нет. Сервер на W2003S. В файловой системе есть для каждого пользователя расшаренная ему папка.
Т.е. в данном случае сервер не более чем файлопомойка, но на нём юзер не может поменять время в отличие от своего компьютера. Ну и каждый юзер может через удалённый раб.стол подключиться, если хочет.
Можно использовать. Если кто-то поможет тему найти, или код Какой сайт - не помню. Ни форум, ни сервер времени... Хотя этих серверов теперь... Если конечно всегда доступен интернет. Но поиск по "сервер времени vba" выдаёт первую ссылку на эту тему.
Спасибо. Нашёл что-то похожее. Буду думать и в этом направлении. Код:
[vba]
Код
Sub GetiNetTime()
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*' ' ' The GetiNetTime macro is written by Karthikeyan T. ' ' Please Note: Original code adjusted here for setting Indian Standard Time, ' India Standard Time (IST) = GMT+5:30 ' Time adjusted for BST by setting the 'Hr' variable = 1 to get GMT+1 ' '*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
Dim ws Dim http Dim GMT_Time, NewNow, NewDate, NewTime, Hr, Mn ', Sc
'Below line wont work since clock providers changed the URL. 'Const GMTTime As String = "http://wwp.greenwichmeantime.com/time/scripts/clock-8/runner.php"
'Updated URL to fetch internet time *** 'Macro updated Date & Time: 27-Oct-12 1:07 PM
Const GMTTime As String = "http://wwp.greenwichmeantime.com/time/scripts/clock-8/runner.php?tz=gmt"
On Error Resume Next Set http = CreateObject("Microsoft.XMLHTTP")
'Set Indian Standard Time from Greenwich Mean Time. 'India Standard Time (IST) = GMT+5:30 Hr = 1 'Hours. =1 for BST, 2 for Europe Time, 11 for Oz? Mn = 0 'Minutes. 'Sc = 0 'Seconds.
NewNow = DateAdd("h", Hr, GMT_Time) 'Adding 5 Hours to GMT. NewNow = DateAdd("n", Mn, NewNow) 'Adding 30 Minutes to GMT. 'NewNow = DateAdd("s", Sc, NewNow) 'Adding 0 Seconds to GMT.
MsgBox "Current Date & Time is: GMT " & NewNow, vbOKOnly, "GetiNetTime"
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*' ' ' If you want to insert the new date & time in excel worksheet just unquote ' the following lines, ' ' Sheets("Sheet1").Select ' Range("A1").Select ' ActiveCell.Value = NewNow ' '*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
'Insert current date & time in cell on selected worksheet. 'Sheets("Sheet1").Select 'Select worksheet as you like 'Range("A1").Select 'Change the destination as you like 'ActiveCell.Value = NewNow
Не очень понял о какой базе идёт речь. SQL вроде бы нет. Сервер на W2003S. В файловой системе есть для каждого пользователя расшаренная ему папка.
Т.е. в данном случае сервер не более чем файлопомойка, но на нём юзер не может поменять время в отличие от своего компьютера. Ну и каждый юзер может через удалённый раб.стол подключиться, если хочет.
Можно использовать. Если кто-то поможет тему найти, или код Какой сайт - не помню. Ни форум, ни сервер времени... Хотя этих серверов теперь... Если конечно всегда доступен интернет. Но поиск по "сервер времени vba" выдаёт первую ссылку на эту тему.
Спасибо. Нашёл что-то похожее. Буду думать и в этом направлении. Код:
[vba]
Код
Sub GetiNetTime()
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*' ' ' The GetiNetTime macro is written by Karthikeyan T. ' ' Please Note: Original code adjusted here for setting Indian Standard Time, ' India Standard Time (IST) = GMT+5:30 ' Time adjusted for BST by setting the 'Hr' variable = 1 to get GMT+1 ' '*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
Dim ws Dim http Dim GMT_Time, NewNow, NewDate, NewTime, Hr, Mn ', Sc
'Below line wont work since clock providers changed the URL. 'Const GMTTime As String = "http://wwp.greenwichmeantime.com/time/scripts/clock-8/runner.php"
'Updated URL to fetch internet time *** 'Macro updated Date & Time: 27-Oct-12 1:07 PM
Const GMTTime As String = "http://wwp.greenwichmeantime.com/time/scripts/clock-8/runner.php?tz=gmt"
On Error Resume Next Set http = CreateObject("Microsoft.XMLHTTP")
'Set Indian Standard Time from Greenwich Mean Time. 'India Standard Time (IST) = GMT+5:30 Hr = 1 'Hours. =1 for BST, 2 for Europe Time, 11 for Oz? Mn = 0 'Minutes. 'Sc = 0 'Seconds.
NewNow = DateAdd("h", Hr, GMT_Time) 'Adding 5 Hours to GMT. NewNow = DateAdd("n", Mn, NewNow) 'Adding 30 Minutes to GMT. 'NewNow = DateAdd("s", Sc, NewNow) 'Adding 0 Seconds to GMT.
MsgBox "Current Date & Time is: GMT " & NewNow, vbOKOnly, "GetiNetTime"
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*' ' ' If you want to insert the new date & time in excel worksheet just unquote ' the following lines, ' ' Sheets("Sheet1").Select ' Range("A1").Select ' ActiveCell.Value = NewNow ' '*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
'Insert current date & time in cell on selected worksheet. 'Sheets("Sheet1").Select 'Select worksheet as you like 'Range("A1").Select 'Change the destination as you like 'ActiveCell.Value = NewNow
Function Time_Inet() As Date Dim dt As Date, sHTMLBody As String sURL = "http://wwp.greenwichmeantime.com/time/scripts/clock-8/x.php" On Error Resume Next Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") With oXMLHTTP .Open "GET", sURL, False .send sHTMLBody = .responsetext End With dt = 25569 + Val(sHTMLBody) / 86400000 Set oXMLHTTP = Nothing Time_Inet = dt End Function
[/vba]
Спасибо! Но, к сожалению, не слишком понял как это использовать. Мне следует создать отдельный стандартный модуль или добавить к коду листа в книге. И наконец: правильно ли я понимаю, что этот код меняет значения функции NOW() на синхронизированное?
Function Time_Inet() As Date Dim dt As Date, sHTMLBody As String sURL = "http://wwp.greenwichmeantime.com/time/scripts/clock-8/x.php" On Error Resume Next Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") With oXMLHTTP .Open "GET", sURL, False .send sHTMLBody = .responsetext End With dt = 25569 + Val(sHTMLBody) / 86400000 Set oXMLHTTP = Nothing Time_Inet = dt End Function
[/vba]
Спасибо! Но, к сожалению, не слишком понял как это использовать. Мне следует создать отдельный стандартный модуль или добавить к коду листа в книге. И наконец: правильно ли я понимаю, что этот код меняет значения функции NOW() на синхронизированное?nulun
Будоражите желтую ячейку,получаете время интернета. В вашей процедуре внес изменения. Для коррекции времени добавте( количество часов)/24 Для Москвы это будет 3/24 dt = 25569 + Val(sHTMLBody) / 86400000+3/24
Будоражите желтую ячейку,получаете время интернета. В вашей процедуре внес изменения. Для коррекции времени добавте( количество часов)/24 Для Москвы это будет 3/24 dt = 25569 + Val(sHTMLBody) / 86400000+3/24doober
Будоражите желтую ячейку,получаете время интернета. В вашей процедуре внес изменения. Для коррекции времени добавте( количество часов)/24 Для Москвы это будет 3/24 dt = 25569 + Val(sHTMLBody) / 86400000+3/24
Это великолепно! Огромное спасибо! Помечу тему, как "РЕШЕНО"
Будоражите желтую ячейку,получаете время интернета. В вашей процедуре внес изменения. Для коррекции времени добавте( количество часов)/24 Для Москвы это будет 3/24 dt = 25569 + Val(sHTMLBody) / 86400000+3/24
Это великолепно! Огромное спасибо! Помечу тему, как "РЕШЕНО"nulun