在Access 2013 Desktop数据库中,我希望在将其行导入表之前通过VBA验证Excel表单。
问题是导入的Excel表可能包含数字,字符串,空值等相同列中的值,具体取决于用户错误导致的行,因此这些值必须最初为VBA类型Variant在验证之前。
如果行无效(例如,一个值不是数字类型,则应该是,一个必填字段为空,等等),我希望能够存储其值并让用户稍后更正它。因此,我正在寻找一种方法来构建一个表,我可以存储这些行,但是字段保持不变,所以使用可能的混合数据类型。
这似乎是不可能的,因为Access表显然需要具有已定义类型的字段,因此没有任何东西等同于Variant。
我怎么能实现这个目标?在保持列结构的同时,存储Variant值行的最简单,最有效的方法是什么?到目前为止,我能想到的唯一方法是使用一些已定义的分隔符为字符串中的每一行连接这些值,并将其存储在Access表的String列中,但是可能有更简单的方法吗?
非常感谢你的帮助。
编辑:阅读您的答案我意识到我忘了指定填写和发送Excel表单(通常在他们的计算机上没有Access)的人员不与拥有Access数据库且需要导入数据的用户相同的用户。在这种配置中,不可能直接使用Access表单来输入数据,这当然会极大地简化任务。虽然我们尝试为首先填写Excel表单的人强制执行规则,但是会出现错误,Access应用程序需要处理它们。操纵Access的用户的导入过程应该尽可能简单(这些用户不是IT专家)。
答案 0 :(得分:0)
我在一段时间内对你的问题进行了解释,并按照我的想法做了一些笔记。
我强烈建议,除非excel工作簿提供您不使用excel的其他功能,否则使用可用于与“他们的”数据交互的表单创建一个简单的Access数据库。他们不一定需要Access许可证才能执行此操作。如果您有sharepoint通过Access创建的Web前端收集数据,Access 2013甚至可以使用新的Web功能。
如果要在Excel中收集数据,则必须使用Excel验证和VBA代码在转移到访问权限之前尽可能多地验证数据。
对于您来说,有一些复杂问题可能会或可能不会成为问题,例如:
用户可以同时编辑/创建/删除相同的行 - 如果他们这样做会发生什么!从Access下载行时,您可能需要“锁定”行。但是如果两个用户添加相同的记录会发生什么,或者在另一个用户再次提交之前删除一行。
用户可以打开多个Excel文件并编辑他们存储的数据而无需将数据提交给Access吗?
多个用户是否可以使用未提交的更改登录同一个工作簿并编辑数据。
使用访问权限可以简化您的代码,因为它可以防止输入错误的数据,并且无需处理上述问题和其他问题
总之,您使用excel作为存储在Access中的数据的前端“表单”。 每个excel文件都可以包含尚未启动的数据
我建议行的主键是用于创建它的excel文件的“路径和名称”。唯一的数字标识符。唯一标识符是为每个excel文件维护的计数器。 “路径和文件名”可以替换为为每个文件创建的唯一标识符。
许多用户使用多个Excel实例将数据输入到表单中,导致在每个电子表格中存储的Excel表格中更新/插入/删除一行或多行。
我希望每当Excel打开时,用户输入用户名,excel将从Access获取“他们的数据”。或者,可以为每个部门或“案例类型”设置工作簿,并且仅与匹配此“在工作簿中设置的自定义条件”的数据进行交互。 Excel不一定需要长期存储数据本身。保存时,工作簿可能始终将数据保存回数据库。
您说Excel VBA对数据执行有限的验证(但没有完整的验证)。它应该尽可能地使用,并且可以说应该能够进行与访问可以做的完全相同的验证。至少应该强制执行数据类型等(例如,使用Excel数据菜单上的标准数据验证规则),或者使用VBA /控件获取验证输入数据所需的任何访问数据。
在更新数据之后,用户可以将数据“提交”(即保存)到访问数据库。在关闭工作簿之前,您可能希望提交数据。 (问题是用户是否可能在未提交数据的情况下在许多计算机上打开许多工作簿。)
可以使用数据类型为“shorttext”且不是必需的所有列创建Access“staging”表。
将数据从excel表加载到Access中的过程会将所有excel行上传到此临时表中。然后,它将验证登台表中的每一行,并将所有有效数据处理到具有数据类型,关系约束等的主表中。登台表中的任何有效行都标记为“VALIDATED& TRANSFERRED”,无效行被标记为INVALID。 “有效和转移的行”随后被忽略,但保留,以便您可以检查发生了什么处理,可能只在测试时。
然后使用Access中的有效/无效状态以及提供给excel用户的合适消息更新excel中的数据。用户可以更正然后重新提交数据。
每个Excel文件的状态均为“已更改/未更改”,以指示用户是否更改了文件中的数据。
当用户打开excel工作簿并且状态未更改时,它将刷新其数据。如果它被更改,则可能无法完成刷新。
为了使用Excel中所做的更改来更新/删除/插入Access中的数据,需要为excel中的用户无法更改的每一行提供唯一标识符。这可能是路径和文件名或登录到Excel的用户名和数字计数器(为每个文件或用户维护)。 (这假设用户必须在一个excel文件中提交更改才能在另一个excel文件上工作。)
无论如何,在不知道更多的情况下,很难完全设计出你需要的东西,但我希望这些想法可以帮到你
哈维