情况如下:
我正在验证数据库中的机构数据。每个机构都有一个与之关联的代码。我想确保我们数据库中的代码是正确的,并检查我们数据库中的名称是否包含错误。我会手动执行此操作,但要检查大约 1200 条记录。
我的所有数据都包含在一个工作簿中。
- 第一张表是我们数据库中的信息。机构名称在 B 列,代码在 K 列。代码以数字形式存储。
- 第二张表是最新信息。机构名称在 A 列,代码在 D 列。代码也以数字形式存储。
- 第三张表是为结果设置的
我想将第一张表中的代码与第二张表中的代码匹配,然后在第三张表上输出结果。我希望每个代码都有一行包含:表 1 中的机构名称、代码和第二张表中的机构名称。我想这样做,以便我可以检查代码是否有效,我们数据库中的代码是否对应于正确的机构,最后我可以检查机构名称的格式和其他差异。
这是我的问题:
- 我没有使用原始工作簿并以某种方式破坏数据,而是创建了一个副本来测试代码。我编写了一个在测试文件中工作的程序,但是当我将它复制到原始文件并进行任何适当的更改时,代码不再有效。 为什么会这样?
- 由于复制代码似乎会产生一些问题,因此我将代码逐字逐句重新输入到原始文件中。有效。但是,只是一种。代码运行,但只会执行条件中包含的部分代码。它将执行块中的第一行,但随后跳过其余部分,然后不再进入条件。 由于一切都正确缩进,什么可能导致这种情况发生?
- 为了尝试检测为什么会出现所有这些问题,我尝试使用 F8 单步执行该程序。它逐步通过,但从不进入条件。它只是遍历循环。 使用 Step Into (F8) 命令时,它不会评估 IF 语句吗?
- 为了测试我的循环是否正常运行,而不是遍历所有记录并不得不等待,我将 FOR 循环条件从 1170 更改为 11。除了循环运行的次数外,没有任何变化。然而,程序不再执行。当我改回号码时,它可以工作。 为什么会这样?
这是我的代码。它可能不是最佳的,但我只需要运行一次比较。即使花费了 2 个小时,也比手动检查它们要少。我知道这段代码有效,因为我让它在测试文件中工作。但是为什么它在原版中不起作用,我该怎么做才能使它起作用?
Sub FindMatches()
Dim oldRow As Integer
Dim newRow As Integer
Dim i As Integer
i = 2
For oldRow = 2 To 1170
For newRow = 2 To 1170
If Worksheets("Sheet1").Cells(oldRow, 9) = Worksheets("Sheet2").Cells(newRow, 4) Then
Worksheets("Sheet3").Cells(i, 1) = Worksheets("Sheet1").Cells(oldRow, 2)
Worksheets("Sheet3").Cells(i, 2) = Worksheets("Sheet1").Cells(oldRow, 9)
Worksheets("Sheet3").Cells(i, 3) = Worksheets("Sheet2").Cells(newRow, 1)
i = i + 1
Exit For
End If
Next newRow
Next oldRow
End Sub