Отслеживание использования электронных таблиц в компании - PullRequest
3 голосов
/ 18 мая 2009

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

Некоторые идеи:

  1. При открытии электронной таблицы обработайте событие OnOpen и напишите сообщение в базу данных для отслеживания

проблемы с этим, где мы храним детали базы данных. Если база данных не работает, мы не хотим, чтобы электронная таблица вылетала, и т.д.

кто-нибудь придумал хорошее решение для управления запасами электронных таблиц, которое решит все вышеперечисленные проблемы.

Ответы [ 8 ]

3 голосов
/ 18 мая 2009

Я не понимаю проблему, которую вы пытаетесь решить здесь: вам не нужна регистрация использования электронных таблиц в качестве конечного результата, что-то вызывает боль, и это то, что вы разработали, чтобы попытаться это исправить.

Если вам нужна серьезно надежная регистрация всего использования электронных таблиц, то я не думаю, что это сработает. Если вам нужна в основном надежная регистрация, просто используйте базу данных и не беспокойтесь о (редких) случаях, когда база данных не работает. On Error Resume Next должно быть достаточно, чтобы обеспечить работу таблицы в этом случае.

Тем не менее, я был бы более склонен пойти на веб-решение: таким образом, вам не нужно быть вовлеченным в обеспечение всех необходимыми драйверами базы данных, рабочими строками подключения и прочей ужасностью.

Еще несколько неловких вопросов, которые заставляют меня думать, что вам может понадобиться другой подход:

Как вы собираетесь развертывать изменения в своем решении для ведения журналов?

Ваши пользователи контролируют уровень безопасности макросов? Или умение писать и редактировать макросы? Могут ли они (невинно или нет) отключить ведение журнала?

Могут ли пользователи работать в автономном режиме? Что происходит потом?

1 голос
/ 04 мая 2012

Твоя идея хороша. Доступность базы данных обычно выше, чем доступность ноутбука пользователя. И в VBA есть своего рода примитивная обработка ошибок (исключений), поэтому они не обязательно будут видеть причудливые сообщения об ошибках.

Да, у вас есть потеря. Любое использование листа сохраняется в автономном режиме, когда пользователь не находится в вашей сети - будет отсутствовать в базе данных. Но я не думаю, что для этого есть 100% надежное решение.

Попробуйте поискать статью Financial Times, например, «Excel - инструмент, который слишком специализирован и открыт для ошибок». Даже название говорит само за себя.

1 голос
/ 01 мая 2012

Я делаю что-то очень похожее на это, чтобы проверить текущую версию приложения Excel. Вы также можете легко использовать этот же код для отправки веб-запроса на сервер, который будет регистрировать «попадания». Вот мой код:

В ThisWorkbook :

Option Explicit

Private Sub Workbook_Open()
    Updater.CheckVersion
End Sub

В другом месте (в модуле под названием Updater)

Option Explicit

Const VersionURL = "http://yourServer/CurrentVersion.txt"
Const ChangesURL = "http://yourServer/Changelog.txt"
Const LatestVersionURL = "http://yourServer/YourTool.xlsm"

#If VBA7 Then
    Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#Else
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If


Public Sub CheckVersion()
    On Error GoTo fail
    Application.StatusBar = "Checking for newer version..."

    Dim ThisVersion As String, LatestVersion As String, VersionChanges As String
    ThisVersion = Range("CurrentVersion").Text
    If ThisVersion = vbNullString Then GoTo fail

    LatestVersion = FetchFile(VersionURL, , True)
    VersionChanges = FetchFile(ChangesURL, , True)
    If LatestVersion = vbNullString Then
        Application.StatusBar = "Version Check Failed!"
        Exit Sub
    Else
        If LatestVersion = ThisVersion Then
            Application.StatusBar = "Version Check: You are running the latest version!"
        Else
            Application.StatusBar = "Version Check: This tool is out of date!"
            If (MsgBox("You are not running the latest version of this tool. Your version is " & _
                ThisVersion & ", and the latest version is " & LatestVersion & vbNewLine & _
                vbNewLine & "Changes: " & VersionChanges & vbNewLine & _
                vbNewLine & "Click OK to visit the latest version download link.", vbOKCancel, _
                "Tool Out of Date Notification") = vbOK) Then
                ShellExecute 0, vbNullString, LatestVersionURL, vbNullString, vbNullString, vbNormalFocus
            End If
        End If
    End If
    Exit Sub
fail:
    On Error Resume Next
    Application.StatusBar = "Version Check Failed (" & Err.Description & ")"
End Sub

Как видите, обработка ошибок позволяет убедиться, что если URL недоступен, приложение не падает, оно просто пишет сообщение пользователю в строке состояния.

Обратите внимание, что если вы не хотите настраивать веб-службу, которая делает это, вы можете попытаться записать таблицу в базу данных - вы все равно можете повторно использовать большую часть этого кода, но не так это.

1 голос
/ 30 апреля 2012

Мне нравятся сделанные предложения и то, что вы написали. Мне лично нравится, чтобы все было просто, поэтому вот мое скромное предложение. Похоже, у вас есть много шаблонов, которыми вы можете управлять, а с Excel все быстро запутывается, и трудно понять, что формулы не изменяются. Имея это в виду, я бы забыл о любом решении для управления изменениями базы данных:

  • Создайте папку общего диска, доступную только для чтения и доступную всем сотрудникам компании
  • Вы можете создать структуру подпапок, которая имеет смысл по группам, отделам, расположению, независимо от того, что работает
  • Храните последние копии шаблонов Excel в папках
  • Я бы также предложил заблокировать шаблоны, в которых есть критические вычисления. -> Постарайтесь оставить его как можно более открытым, чтобы их можно было настраивать там, где они должны быть, но на ваше усмотрение

Вы также можете рассмотреть возможность создания хранилища управления версиями, которое управляет изменениями в этой структуре папок. Посмотрите на управление версиями с помощью простого интерфейса, такого как tortoiseSVN, чтобы вы могли отслеживать, какие изменения были сделаны и когда. Стандартные резервные копии с общего диска спасают жизнь, но я все равно дополню их системой контроля версий (она немного упрощает задачу). Вот пара ссылок, которые помогут вам начать работу, вы можете попробовать Subversion локально и посмотреть, что вы думаете:

Инструкции по настройке Subversion в Windows

Клиент черепахи для взаимодействия с Subversion

Также обратите внимание, что если вы решили реализовать какое-либо подключение к базе данных для электронной таблицы, чтобы выполнить регистрацию на сервере базы данных, как уже было отмечено, вы можете использовать «при возобновлении ошибки далее». Вот что вы можете сделать:

  • После возобновления следующей попытки открыть соединение с БД
  • Вы можете затем обработать ошибку с помощью оператора if, такого как:

    if err.number = 3024 then
        msgbox "Database file not found, check network connection and retry"
        exit
    end if
    

Вот ссылка для поиска дополнительных кодов ошибок для перехвата аналогичным образом:

Ошибка перехвата в VBA

1 голос
/ 18 мая 2009

Несмотря на то, что вам может понадобиться войти в систему в краткосрочной перспективе, долгосрочное решение должно заключаться в том, чтобы взять под контроль ваши электронные таблицы. Вы должны собрать «окончательную» копию электронных таблиц и переместить их в общий файловый ресурс, где все они будут защищены - пользователи смогут изменять данные в них, но не смогут изменять формулы.

Если вам нужно более контролируемое решение для совместной работы, вам следует рассмотреть вопрос об использовании SharePoint, возможно, версии MOSS, в которой есть службы Excel.

Возможно, вам также понадобится изучить, как используются электронные таблицы. Возможно, они используются вместо того, чтобы писать программу, и в некоторых случаях может быть пора это сделать.

Наконец, вы не хотите отслеживать использование электронных таблиц - вам все равно, будет ли кто-то создавать электронную таблицу для отслеживания результатов футбольной команды своего ребенка. Это конкретные таблицы, которые вас интересуют. Регистрация может помочь вам отследить это с самого начала, но это все, что вам может помочь.

1 голос
/ 18 мая 2009

Сделайте так, чтобы таблица Excel отправляла запрос на веб-сервер.

Добавьте msinet.ocx к вашей панели инструментов и создайте форму с элементом управления Inet. Добавьте ocx, щелкнув правой кнопкой мыши где-нибудь в области панели инструментов.

Затем вы можете установить местоположение элемента управления Inet там, где вы можете справиться с тем, что таблица открыта.

0 голосов
/ 30 апреля 2012

Вы можете использовать файловый подход с любым из нескольких решений для контроля целостности файлов. Samhain - один из бесплатных примеров с открытым исходным кодом. Это позволило бы вашим сотрудникам получать доступ к своим электронным таблицам без помех, но сообщало бы об обнаружении новых электронных таблиц или об изменении их временных отметок или значений хеш-функции. Он также будет обнаруживать изменения, внесенные в то время, когда разработчик отключился (например, на своих ноутбуках) после повторного подключения к сети.

0 голосов
/ 18 мая 2009

запись в базу данных, если запись не удалась, перехватите ошибку и отправьте электронное письмо кому-нибудь, кто может вручную увеличить счетчик при резервном копировании базы данных.

...