Доброго времени суток коллеги! Прошу подсказать как реализовать такую задачу: есть файл который постоянно модернизируется по функционалу, этот файл используют много людей с разных компьютеров. Необходимо создать окно уведомлений которое бы могло появляться раз у каждого пользователя при входе в файл со своего ПК и каждый раз после изменения текста в этом окне он каждый раз появлялся у каждого входящего в этот файлик и давал возможность ознакомится с изменениями. Но надо что бы он один раз появлялся после внесения изменений в текстовку этого файла (это окно с уведомлением)
Доброго времени суток коллеги! Прошу подсказать как реализовать такую задачу: есть файл который постоянно модернизируется по функционалу, этот файл используют много людей с разных компьютеров. Необходимо создать окно уведомлений которое бы могло появляться раз у каждого пользователя при входе в файл со своего ПК и каждый раз после изменения текста в этом окне он каждый раз появлялся у каждого входящего в этот файлик и давал возможность ознакомится с изменениями. Но надо что бы он один раз появлялся после внесения изменений в текстовку этого файла (это окно с уведомлением)Gameower
например можно сделать скрытый лист, где будет текст сообщения при запуске , прогружать форму которая выведет сообщение, а при закрытии формы сохранит его обратно на скрытом листе
например можно сделать скрытый лист, где будет текст сообщения при запуске , прогружать форму которая выведет сообщение, а при закрытии формы сохранит его обратно на скрытом листеK-SerJC
например можно сделать скрытый лист, где будет текст сообщения при запуске , прогружать форму которая выведет сообщение, а при закрытии формы сохранит его обратно на скрытом листе
хорошо а как реализовать это? через какую функцию ?
например можно сделать скрытый лист, где будет текст сообщения при запуске , прогружать форму которая выведет сообщение, а при закрытии формы сохранит его обратно на скрытом листе
хорошо а как реализовать это? через какую функцию ?Gameower
Private Sub Workbook_Open() ActiveWorkbook.Sheets("secr").Cells(1, 1).Value = InputBox("читайте, пишите для других", "СООБЩЕНИЕ", ActiveWorkbook.Sheets("secr").Cells(1, 1).Value) End Sub
[/vba]
если закрыть окно или нажать отмену, следующий открывший файл увидит такое же окно, если изменить текст и нажать ок, следующий увидит этот текст
вместо inputbox, для больших текстов правильнее форму с кнопками сделать...
самое простое придумал так: [vba]
Код
Private Sub Workbook_Open() ActiveWorkbook.Sheets("secr").Cells(1, 1).Value = InputBox("читайте, пишите для других", "СООБЩЕНИЕ", ActiveWorkbook.Sheets("secr").Cells(1, 1).Value) End Sub
[/vba]
если закрыть окно или нажать отмену, следующий открывший файл увидит такое же окно, если изменить текст и нажать ок, следующий увидит этот текст
вместо inputbox, для больших текстов правильнее форму с кнопками сделать...K-SerJC
K-SerJC, хороший вариант, один момент, нужно что бы это окно выпадало один раз после обновления в нем написанного у каждого нового посетителя файла, и повторное появление будет только после обновления содержимого в этом окне, это возможно простыми командами сделать? и желательно нижнюю строку где можно писать ее убрать совсем окно несет информативный характер только
K-SerJC, хороший вариант, один момент, нужно что бы это окно выпадало один раз после обновления в нем написанного у каждого нового посетителя файла, и повторное появление будет только после обновления содержимого в этом окне, это возможно простыми командами сделать? и желательно нижнюю строку где можно писать ее убрать совсем окно несет информативный характер толькоGameower
Сообщение отредактировал Gameower - Вторник, 01.11.2016, 13:09
K-SerJC, хороший вариант, один момент, нужно что бы это окно выпадало один раз после обновления в нем написанного у каждого нового посетителя файла, и повторное появление будет только после обновления содержимого в этом окне, это возможно простыми командами сделать?
можно, но тогда надо базу вести например на этом же листе хранить имя пользователя и какое сообщение он получил когда открывал файл и показывать сообщение только если текст отличается от хранимого в базе или в базе еще нет такого пользователя
K-SerJC, хороший вариант, один момент, нужно что бы это окно выпадало один раз после обновления в нем написанного у каждого нового посетителя файла, и повторное появление будет только после обновления содержимого в этом окне, это возможно простыми командами сделать?
можно, но тогда надо базу вести например на этом же листе хранить имя пользователя и какое сообщение он получил когда открывал файл и показывать сообщение только если текст отличается от хранимого в базе или в базе еще нет такого пользователяK-SerJC
Excel 2013 Цитата Gameower, 01.11.2016 в 13:10, в сообщении № 10 K-SerJC, а вы могли бы дать пример как это сделать? и приписать коменты куда вставить пользователей и т.д.
если не очень срочно сделаю, надо время подумать, а тут еще работой пригрузили :-))
вопрос: есть строго определенный список пользователей? или это сообщение должно быть для любого кто файл открыл?
вообще есть список юзеров которые будут часто использовать, но есть и новые пользователе которые могут заходить. возможно ли через название ПК в сети это сделать??
Excel 2013 Цитата Gameower, 01.11.2016 в 13:10, в сообщении № 10 K-SerJC, а вы могли бы дать пример как это сделать? и приписать коменты куда вставить пользователей и т.д.
если не очень срочно сделаю, надо время подумать, а тут еще работой пригрузили :-))
вопрос: есть строго определенный список пользователей? или это сообщение должно быть для любого кто файл открыл?
вообще есть список юзеров которые будут часто использовать, но есть и новые пользователе которые могут заходить. возможно ли через название ПК в сети это сделать??Gameower
Gameower, Мой вариант через Серийный номер жесткого диска
момнет такой, необходимо не ту инфо выводить,а другую ту которую я бы мог сам вписывать типа версия файла такая то и внес по функционалу такие то изменения и т.д.
Gameower, Мой вариант через Серийный номер жесткого диска
момнет такой, необходимо не ту инфо выводить,а другую ту которую я бы мог сам вписывать типа версия файла такая то и внес по функционалу такие то изменения и т.д.Gameower
вообще есть список юзеров которые будут часто использовать, но есть и новые пользователе которые могут заходить. возможно ли через название ПК в сети это сделать??
да, но тогда если с этого пк другой пользователь откроет, то не увидит сообщение. и еще момент нужно чтобы один модератор всегда это сообщение мог открыть и отредактировать, иначе, если все прочитают и изменений не будет, то окно больше не откроется. и такой еще момент, изменять текст может любой? или только один пользователь изменяет все читают?
можно сделать по юзерам, если при открытии новый юзер, которого нет в базе, ему сообщение будет показано, и в базу он добавиться, но один главный должен быть в любом раскладе. можно сделать так, что первый прописавшийся в базе пользователь автоматом становиться главным, и ему сообщение открывается всегда, с возможностью редактирования текста. можно сделать что остальные юзеры могут добавлять к основному тексту свои комментарии, с добавлением времени и имени пользователя...
вообще есть список юзеров которые будут часто использовать, но есть и новые пользователе которые могут заходить. возможно ли через название ПК в сети это сделать??
да, но тогда если с этого пк другой пользователь откроет, то не увидит сообщение. и еще момент нужно чтобы один модератор всегда это сообщение мог открыть и отредактировать, иначе, если все прочитают и изменений не будет, то окно больше не откроется. и такой еще момент, изменять текст может любой? или только один пользователь изменяет все читают?
можно сделать по юзерам, если при открытии новый юзер, которого нет в базе, ему сообщение будет показано, и в базу он добавиться, но один главный должен быть в любом раскладе. можно сделать так, что первый прописавшийся в базе пользователь автоматом становиться главным, и ему сообщение открывается всегда, с возможностью редактирования текста. можно сделать что остальные юзеры могут добавлять к основному тексту свои комментарии, с добавлением времени и имени пользователя...
K-SerJC, главный будет админ,тоесть я, я буду модерировать, остальные только должны читать и быть вкурсе нововведений и всего лишь,ну и они должны раз прочесть новости и больше что бы им не приходилось это окно закрывать, только в случае если я внес изменение в новостях тогда сново раз прочесть им надо будет а и за каждым ПК сидит один и тот же человек там не меняются люди
K-SerJC, главный будет админ,тоесть я, я буду модерировать, остальные только должны читать и быть вкурсе нововведений и всего лишь,ну и они должны раз прочесть новости и больше что бы им не приходилось это окно закрывать, только в случае если я внес изменение в новостях тогда сново раз прочесть им надо будет а и за каждым ПК сидит один и тот же человек там не меняются людиGameower
Сообщение отредактировал Gameower - Среда, 02.11.2016, 08:25
Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Save End Sub
Private Sub Workbook_Open() If ActiveWorkbook.Sheets("secr").Visible <> 0 Then ActiveWorkbook.Sheets("secr").Visible = 0 Message (CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber) End Sub
Private Sub Message(snDrive As String) Dim pUz As Integer, txt As String If ActiveWorkbook.Sheets("secr").Cells(3, 1).Value = "" Then AddDrive (snDrive): Moder: Exit Sub If snDrive = ActiveWorkbook.Sheets("secr").Cells(3, 1).Value Then Moder: Exit Sub pUz = FindUz(snDrive) If pUz = 0 Then AddDrive (snDrive): Uzver: Exit Sub txt = ActiveWorkbook.Sheets("secr").Cells(1, 1).Value If ActiveWorkbook.Sheets("secr").Cells(pUz, 2).Value = txt Then Exit Sub Else: UpdateDriveRec pUz, txt: Uzver End Sub Private Sub Moder() frmMessage.Hide frmMessage.TextBox1.Enabled = False frmMessage.cmbOK.Caption = "Отредактировал!" frmMessage.Label1.Visible = False frmMessage.Show End Sub Private Sub Uzver() frmMessage.Hide frmMessage.TextBox1.Enabled = False frmMessage.cmbOK.Caption = "Прочитал!" frmMessage.Label1.Visible = True frmMessage.Show End Sub
Private Sub AddDrive(snDrive As String) Dim t As Integer t = ActiveWorkbook.Sheets("secr").Cells(2, 2).Value ActiveWorkbook.Sheets("secr").Cells(t, 1).Value = snDrive ActiveWorkbook.Sheets("secr").Cells(2, 2).Value = t + 1 End Sub
Private Sub UpdateDriveRec(poz As Integer, txt As String) ActiveWorkbook.Sheets("secr").Cells(poz, 2).Value = txt End Sub
Private Function FindUz(snDrive As String) As Integer Dim st As Integer, sp As Integer, à As Integer FindUz = 0 st = ActiveWorkbook.Sheets("secr").Cells(2, 1).Value sp = ActiveWorkbook.Sheets("secr").Cells(2, 2).Value For f = st To sp If snDrive = ActiveWorkbook.Sheets("secr").Cells(f, 1).Value Then FindUz = f: Exit Function Next f End Function
[/vba]
логика работы такая: на листе secr (невидимый) храниться база ячейка 1,1 актуальный текст сообщения ячейки 2,1 и 2,2 номера первой и последней заполненой сроки базы ячейка 3,1 sn диска С: модератора (при пустой ячейки автоматом вписывает sn открывшего файл) 4,1 и 4,2 sn диска и сообщение которое прочитано (далее по всем открывшим файл) если открывает модератор в форме текст можно изменить, окно с текстом всегда открывается, если другой пользователь открывает, то проверям совпадение текста, в базе с текущим если пользователя нет в базе добавляем его sn и показываем текст.
проверяй :-)
вот так сделал:
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Save End Sub
Private Sub Workbook_Open() If ActiveWorkbook.Sheets("secr").Visible <> 0 Then ActiveWorkbook.Sheets("secr").Visible = 0 Message (CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber) End Sub
Private Sub Message(snDrive As String) Dim pUz As Integer, txt As String If ActiveWorkbook.Sheets("secr").Cells(3, 1).Value = "" Then AddDrive (snDrive): Moder: Exit Sub If snDrive = ActiveWorkbook.Sheets("secr").Cells(3, 1).Value Then Moder: Exit Sub pUz = FindUz(snDrive) If pUz = 0 Then AddDrive (snDrive): Uzver: Exit Sub txt = ActiveWorkbook.Sheets("secr").Cells(1, 1).Value If ActiveWorkbook.Sheets("secr").Cells(pUz, 2).Value = txt Then Exit Sub Else: UpdateDriveRec pUz, txt: Uzver End Sub Private Sub Moder() frmMessage.Hide frmMessage.TextBox1.Enabled = False frmMessage.cmbOK.Caption = "Отредактировал!" frmMessage.Label1.Visible = False frmMessage.Show End Sub Private Sub Uzver() frmMessage.Hide frmMessage.TextBox1.Enabled = False frmMessage.cmbOK.Caption = "Прочитал!" frmMessage.Label1.Visible = True frmMessage.Show End Sub
Private Sub AddDrive(snDrive As String) Dim t As Integer t = ActiveWorkbook.Sheets("secr").Cells(2, 2).Value ActiveWorkbook.Sheets("secr").Cells(t, 1).Value = snDrive ActiveWorkbook.Sheets("secr").Cells(2, 2).Value = t + 1 End Sub
Private Sub UpdateDriveRec(poz As Integer, txt As String) ActiveWorkbook.Sheets("secr").Cells(poz, 2).Value = txt End Sub
Private Function FindUz(snDrive As String) As Integer Dim st As Integer, sp As Integer, à As Integer FindUz = 0 st = ActiveWorkbook.Sheets("secr").Cells(2, 1).Value sp = ActiveWorkbook.Sheets("secr").Cells(2, 2).Value For f = st To sp If snDrive = ActiveWorkbook.Sheets("secr").Cells(f, 1).Value Then FindUz = f: Exit Function Next f End Function
[/vba]
логика работы такая: на листе secr (невидимый) храниться база ячейка 1,1 актуальный текст сообщения ячейки 2,1 и 2,2 номера первой и последней заполненой сроки базы ячейка 3,1 sn диска С: модератора (при пустой ячейки автоматом вписывает sn открывшего файл) 4,1 и 4,2 sn диска и сообщение которое прочитано (далее по всем открывшим файл) если открывает модератор в форме текст можно изменить, окно с текстом всегда открывается, если другой пользователь открывает, то проверям совпадение текста, в базе с текущим если пользователя нет в базе добавляем его sn и показываем текст.K-SerJC