我应该使用Excel还是Access

时间:2013-08-21 01:03:29

标签: database excel ms-access database-design

目前我正在尝试确定如何轻松地在Excel或Access中输入数据。我在excel中使用数据表单工具但是我使用的扫描程序配置为在成功扫描后发送一个输入命令,因此它将移动到下一个单元格。

Serial Number   Employee    Time
    123          Brian  8/20/13 8:49:21 PM
    213          Brian  8/20/13 8:49:21 PM
    334          Nick   8/20/13 8:49:21 PM

我希望能够准确地扫描序列号。正如现在每次在工作表上进行更改一样,时间更新确实会破坏目的。我目前正在使用这个公式:

 =IF(A2<>"",NOW(),"")

我还希望能够使员工姓名能够被更改,但在该人扫描项目期间也保持不变。我尝试引用一个下拉列表但是,当该字段发生变化时,员工字段的其余部分也会发生变化。

我猜这最适合Access,因为最终这将位于不同的位置,我需要能够关联数据。老实说,我只是太熟悉它了能够真正创造出令人惊奇的东西并让它发挥作用。

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

由于您的序列号很可能与某些文章相关,并且您已经考虑过多个地点和用户,因此我建议使用Access。

所有这些都倾向于更多的数据库,这可能不像excel那样直观地为你设置,但最终它更加稳固和易于处理,当涉及到捕捉共和国和制作时查询。

然而,它可以通过两种方式完成。但不使用now() - 因为只要重新计算,此函数就会更新您的时间。这就是为什么你一遍又一遍地得到同样的时间。

您必须创建并调用一个函数,该函数将时间作为固定文本插入,而不是作为动态内容。

在Access上,使用now-function作为字段的默认值会起作用,因为数据库条目的值不是函数。

对于Excel,您必须提升此功能,并在激活新工作人员时创建/激活keylistener:

'This code goes into a VBA-Module
'and can be access on a Worksheet calling =myScan("test")
Public Function myScan(strWorker As String)
    Table1.Cells(2, 1) = "1"
    Table1.Cells(2, 2) = strWorker
    Table1.Cells(2, 3) = Now()
End Function

序列号可以从行中派生。主要问题是留在当前/下一行以粘贴数据。

但你可以 - 例如 - 创建一个Excel对话框来选择一个Worker,然后激活一个扫描模式并扫描......你甚至可以连接到Web或Access数据库,而不是将数据存储在excel中,我强烈推荐;)

修改

'This code works, when you place it as the VBA-Code of your worksheet
Private Sub Worksheet_Change(ByVal Target As Range)
    'react only on changes on column A
    If (Target.Column = 1) Then
        'react only on changes on column A when the row is greater than 5
        If (Target.Row > 5) Then
            'use the current time for Bx
            Me.Cells(Target.Row, 2) = Now()
            'use the user-name from C2 in Cx
            Me.Cells(Target.Row, 3) = Me.Cells(2, 3)
        End If
    End If
End Sub

使用ALT+F11打开VBA-Editor并选择要使用的表对象并将上面的代码放入其中,而不是另存为Macro-Excel-Dokument。

您的工作表应如下所示:

enter image description here

无论何时从A6-Ax更改内容,它都会自动更新。

答案 1 :(得分:0)

简短的回答是; Excel不是数据库。如果您要报告数据,并且它将包含大量数据,请不要考虑使用Excel。这是一个SPREADSHEET,而不是DATABASE。