【发布时间】:2019-06-17 04:06:34
【问题描述】:
我想创建一个宏来打开文件夹中的所有 Excel 书籍,读取填充的信息并将它们存储在代表我的数据库的工作表中。 我需要了解您的建议,以及获得快速灵活结果的最佳方法。
为了帮助您理解我的问题,让我们假设我有 3 个包含名字、姓氏和国家/地区的 excel 模板,但在这些图片的不同位置
我通过这些图片给出的例子真的很简单,但这只是为了帮助你理解我想要什么。现在我将详细说明真正的需求。事实上,我有 3 个模板,但每个模板都包含大约 80 个要收集的数据字段(不仅是名字、姓氏和国家)。而且我不必只阅读 3 个文件,但我必须阅读放置在文件夹中的大约 200 个文件,每个文件要么是模板 1,要么是 2 或 3。将来我们可能有一个模板 4,这就是我需要的原因灵活的东西。
我考虑过命名范围,但模板 1,2,3 已经存在,我无法从 200 个用户那里收集 200 个现有的 excels 文件,并且在启动我的宏之前,为 80 字段提供命名范围在每个文件。如果将来它们将成为模板 4,我可以使用命名范围,因此在将文件发送给将填写 excel 的最终用户之前,我们命名范围并将其发送给他,但在模板 4 之前,我必须修复当前3个现有模板的问题。
我还考虑过根据列和行索引读取数据,例如,我检查文件的类型,如果我正在读取文件模板,我会从单元格 (2,3) 中获取名字,如果是模板 2,我从单元格 (5,6) 获取信息,如果是模板 3,我从 Cel (9,4) 获取信息,但问题是我的代码根本不灵活。
我也说过,我可能会喜欢一张名为reference的表格,其中我根据模板模型定义每个字段的位置,例如我说名字是模板1在位置2,3模板 2 的名字是 5,6,模板 3 的名字是 9,4。如下图所示,当我遍历我的 200 个文件时,我检查它是否是模板 1,我阅读了参考表,我知道名字将在这个位置,模板 2 也是如此,依此类推...... .这个解决方案看起来像以前的一个,但更灵活,因为如果有什么变化,我们只需要改变参考表,但我想知道如果我必须为每个字段读取 2 个单元格,它会快还是慢参考表了解位置。
我真的很迷茫,因为在开始编码之前我必须选择最好的方式来做我想做的事,以避免浪费时间。 如果任何专家可以通过告诉我什么是最好的或给我比我想象的更多的想法来帮助我,我将非常感激。
提前感谢任何帮助者
【问题讨论】:
-
Peh,你有回答吗?我看到你写了一些东西,但看不到你写了什么。
-
查看Range.Find method。您可以使用它来搜索“名字”并使用找到的单元格,而无需事先知道其位置。然后你只需要学习如何Loop though files in a folder。这应该给你一个开始的地方。
-
@JustGreat 不,刚刚更正了您的标签。但我正要写和tigeravatar一样的评论。 • 您的问题过于宽泛,无法提供答案,因为您什么都没做。试试上面评论中的方法。
-
多亏了这两个...循环一个文件夹我已经知道怎么做这不是问题...至于 Range.Find,你的意思是我检查每个数据的标题获得价值?它比告诉我需要位置 1,2 的数据更快吗?我也在考虑一些事情。 range.find 会给我标题的位置,所以我应该做一个偏移来获得正确的值?如果是,这意味着如果有一天,我们在标题和值之间添加一列或一行或一个小单元格,我应该检查整个代码对吗?
-
Model 1等名称是否总是在Cells(1, 6)中?然后,您可以读取此单元格以确定它是哪个模型以及其他数据的预期位置。这会比使用find()更快。
标签: excel vba optimization