2

我有一个包含几百个工作表的工作簿,每个工作表都以相同的方式布局(即拥有相同的列),尽管数据行数不同。

我想循环浏览每张工作表中的每一行,如果某一列(列“L”)中的值是一个特定值(在这种情况下是一个字符串),我想将该行复制到一个新的工作表。所以最后我有一个大工作表,其中每一行都存在于较大的工作簿中,在“L”列中具有特定的指定值。

我不想也循环浏览我将结果复制到的工作表;也许我需要从不同的工作簿中执行此操作?

提前致谢。

回复:

所以文件和代码在我的办公室,但是:如果这是在 1 个工作表中,我知道有几种方法可以遍历行并返回部分或全部相应字段。我遇到的麻烦是(a)对其进行设置,使其在不同行数的不同工作表中循环,(b)将其返回到新的工作表,而无需重写已经编写的内容。如果有人有使用 ADO 的解决方案,那也将受到欢迎,因为它作为一个整体是一个非常大的工作表。再次感谢,如果我提出大而未指定的问题,我深表歉意。

4

1 回答 1

0

由于您的问题是基于文本询问没有代码的意见,所以我给您我的意见并通过这个答案找到 - 很公平:)

根据我的评论,

因此,如果您想从另一本书中进行搜索,考虑到此BUG:内存泄漏发生在您使用 ActiveX 数据对象 (ADO) 查询打开的 Excel 工作表时会发生data book更好的主意

通过这种方式,您将自己data book视为数据库并从 Excel 表中查询。即使这样做,您也可能希望确保您考虑作为数据集的每个可搜索工作表都具有相似的结构。如果您向我们提供了示例数据,那么这比我们在黑暗中不断向目标投掷石头要好得多... ;) 您提到了搜索行。您是否在每张纸上搜索一列的行?如果是这样,您的所有可搜索工作表都包含此列吗?

因此,对于您要搜索/扫描的行,这是 Microsoft 必须说的,非常需要注意:

“要扫描的行数:Excel 不会像关系数据库那样为 ADO 提供有关其包含的数据的详细架构信息因此,驱动程序必须扫描至少几行现有数据,以便做出有根据的猜测每列的数据类型。 “要扫描的行”的默认值为八 (8) 行。您可以指定从一 (1) 到十六 (16) 行的整数值,也可以指定零 (0) 进行扫描所有现有行。这是通过将可选的 MaxScanRows= 设置添加到连接字符串,或通过更改 DSN 配置对话框中的 Rows to Scan 设置来完成的。

但是,由于 ODBC 驱动程序中的错误,指定要扫描的行 (MaxScanRows) 设置目前无效。换句话说,Excel ODBC 驱动程序(MDAC 2.1 和更高版本)总是扫描指定数据源中的前 8 行以确定每一列的数据类型。"

此外,如果您的可搜索行具有混合数据类型--> 这会使您处于极大的危险之中。微软也谈到了这方面。

因此,您可以在上述过程中采取许多预防措施,但它比 aVBA Binary Search和 a更快.Find。但是,如果您不想采取ADO措施,那么您可以为我们提供一些您可能想出的设计。很高兴能在这方面继续前进。:)

于 2012-12-11T05:48:57.033 回答