我们有许多正在使用的自定义电子表格解决方案,我们需要一些以编程方式跟踪它们。显然,因为它们是电子表格,人们可以在本地保存它们,重命名它们等等,所以我们需要一个可以解决这个问题的解决方案。
有些想法是:
这方面的问题是我们存储数据库详细信息的位置。如果数据库关闭,我们不希望电子表格崩溃等等
有人提出了一个很好的电子表格库存管理解决方案来解决上述所有问题。
答案 0 :(得分:3)
我不明白你在这里要解决的问题:你不需要将电子表格使用记录作为最终结果,这会导致痛苦,这就是你设法试图解决的问题。
如果您需要严格可靠地记录所有电子表格的使用情况,那么我认为这不会起作用。如果您需要大多数可靠的日志记录,那么只需使用数据库,不要担心数据库关闭的(罕见)情况。 On Error Resume Next
应该足以确保电子表格在该事件中继续。
也就是说,我更倾向于选择基于Web的解决方案:这样您就不必参与确保每个人都拥有必要的数据库驱动程序,工作连接字符串和其他可怕的解决方案。
一些令人尴尬的问题让我觉得你可能需要另一种方法:
您打算如何将更改部署到日志记录解决方案?
您的用户是否可以控制其宏安全级别?或者编写和编辑宏的能力?他们可能(无辜地或以其他方式)禁用日志记录吗?
用户可以离线操作吗?那么会发生什么?
答案 1 :(得分:1)
让excel电子表格向Web服务器发出请求。
将msinet.ocx添加到工具箱并使用Inet控件创建表单。通过右键单击工具箱区域中的某个位置来添加ocx。
然后,您可以设置Inet控件的位置,您可以处理打开电子表格的位置。
答案 2 :(得分:1)
虽然您可能需要短期登录,但长期解决方案应该是控制您的电子表格。您应该收集电子表格的“权威”副本,并将它们移动到文件共享中,它们都将受到保护 - 用户将能够更改其中的数据,但无法更改公式。
如果您需要更受控制的协作解决方案,那么您应该考虑使用SharePoint,可能是其上有Excel Services的MOSS版本。
您可能还需要了解如何使用电子表格。也许他们被用来代替编写程序的人,在某些情况下,可能是时候这样做了。
最后,您不希望跟踪电子表格的使用情况 - 如果有人创建了一个电子表格来跟踪孩子的足球队得分,您就不在乎了。这是您感兴趣的特定电子表格。日志记录可以帮助您跟踪开始,但这就是它可以帮助您。
答案 3 :(得分:1)
我喜欢到目前为止提出的建议和你写的内容。我个人喜欢保持简单,所以这是我的拙见。听起来你有很多你可能正在管理的模板,而且excel的东西很快变得混乱,而且很难知道公式没有被篡改。考虑到这一点,我会忘记任何数据库更改管理解决方案,而不是:
您还可以考虑设置一个版本控制存储库来管理对此文件夹结构的更改。使用像tortoiseSVN这样的简单界面查看版本控制,以便您可以跟踪所做的更改以及何时更改。标准的共享驱动器备份可以节省生命,但我仍然需要补充版本控制系统(只是让事情变得更容易)。这里有几个链接可以帮助您入门,您可以尝试在本地进行颠覆,看看您的想法:
Instructions to setup Subversion on Windows
Tortoise Client to interact with Subversion
另请注意,如果您选择为电子表格实现某种数据库连接以执行数据库服务器上的日志记录,则可以使用“on next resume next”。这是你可以做的:
您可以选择使用if语句处理错误,例如:
if err.number = 3024 then
msgbox "Database file not found, check network connection and retry"
exit
end if
这是一个链接,用于以类似方式查找其他错误代码:
答案 4 :(得分:1)
我做了类似的事情来检查当前版本的Excel应用程序。您可以轻松地使用相同的代码向将记录“命中”的服务器发出Web请求。这是我的代码:
在 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不可用,应用程序不会崩溃,它只是在状态栏中向用户写入消息。
请注意,如果您不想设置执行此操作的Web服务,您可以尝试将电子表格写入数据库 - 您仍然可以重复使用大量此代码,但不能重复使用它
答案 5 :(得分:1)
你的想法很好。数据库可用性通常高于用户笔记本电脑的可用性。并且在VBA中存在一种原始错误(异常)处理,因此它们不一定会看到错误的错误消息。
是的,你有损失。当用户不在您的网络上时,离线保存的工作表的任何使用都将从数据库中丢失。但我不认为这是一个100%万无一失的解决方案。
尝试搜索“金融时报”的文章,例如“Excel - 一种过于临时且容易出错的工具”。甚至标题都说明了一切。
答案 6 :(得分:0)
写入数据库,如果写入失败,捕获错误并向可以在数据库备份时手动增加计数的人发送电子邮件。
答案 7 :(得分:0)
您可以使用多种文件完整性监控解决方案执行基于文件的方法。 Samhain是一个免费的开源示例。这样,您的员工就可以在不受干扰的情况下访问其电子表格,但会在发现新电子表格或其时间戳或哈希值发生变化时进行报告。它还可以检测开发人员在重新连接到网络后离线(例如,在他们的笔记本电脑上)所做的更改。