-1

目前我正在尝试确定如何轻松地在 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,因为最终它将位于不同的位置,我需要能够关联数据。老实说,我对它太不熟悉了,无法真正创建令人惊奇的事情并让它发挥作用。

任何帮助将不胜感激。

4

2 回答 2

1

因为您的序列号很可能与某些文章相关,并且您已经考虑了多个位置和用户,所以我建议使用 Access。

所有这一切都更倾向于一个数据库,它可能不像 excel 那样为您设置那么直观,但最终它更可靠,更容易处理,当涉及到捕获重复项和进行查询时。

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

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

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

对于 Excel,在激活新 Worker 时,您必须增加此功能并可以创建/激活 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。

您的工作表应如下所示:

在此处输入图像描述

每当您从 A6-Ax 更改某些内容时,它都会自动更新。

于 2013-08-21T01:33:21.237 回答
0

简短的回答是;Excel 不是数据库。如果您要报告数据,并且它将包含大量数据,甚至不要考虑 Excel。它是电子表格,而不是数据库。

于 2013-08-22T14:47:37.940 回答