【发布时间】:2021-06-20 19:24:57
【问题描述】:
如果可能的话,我想要一些帮助!目前,它会导致 excel 工作表在每次运行时崩溃,可能是因为循环没有结束。任何人都可以尝试帮助我修复我的代码吗?所有 4 张纸的行数都低于 5000 行。
我目前有一个包含 4 张工作表(工作表的数量会改变)和另外一张名为“结果”的工作表。 我设法在 B 列中查找字符串:“员工代码:-”,并获取 Y 列和 K 列中的值并将其分别粘贴到结果 A 和 B 中。 (从结果表的第 5 行开始)。 (如果 S 列和 K 列具有相同的值,则移动到下一个查找)。
然后我需要从 D 到 AN 运行的“员工代码”下方 3 和 4 行的值,并将其粘贴到 S 和 K 的值旁边
然后在粘贴结果后留下一行并重复其余的查找值。
Sub FindAndExecute()
Dim Sh As Worksheet
Dim Loc As Range
Dim i,j As Integer
i = 5
For Each Sh In ThisWorkbook.Worksheets
With Sh.UsedRange
Set Loc = .Cells.Find(What:="Employee Code:-")
If Not Loc Is Nothing Then
Do Until Loc Is Nothing
If Loc.Offset(0, 9).Value <> Loc.Offset(0, 23).Value Then
Sheets("Result2").Cells(i, 1).Value = Loc.Offset(0, 9).Value
Sheets("Result2").Cells(i, 2).Value = Loc.Offset(0, 23).Value
j = 3
Do
Sheets("Result2").Cells(i, j).Value = Loc.Offset(3, j - 1).Value
Sheets("Result2").Cells(i + 1, j).Value = Loc.Offset(4, j -
1).Value
j = j + 1
Loop Until j > 35
i = i + 3
Else
End If
Set Loc = .FindNext(Loc)
Loop
End If
End With
Set Loc = Nothing
Next
End Sub
【问题讨论】:
-
您在尝试实施解决方案时遇到的具体问题是什么?是什么阻碍了你完成这项工作?
-
嗨,蒂姆,我对使用 VBA 还是很陌生。所以也许就是这样。我能够找到我需要的字符串值,但我不确定如何粘贴偏移值。使用 match 和 index 会比使用 find next 更好吗?
-
如果你有一些现有的代码,那么你应该将它包含在你的帖子中,即使它不完整。没有代码的问题往往会在这里结束。
-
我会这样做。 1. 我将遍历所有工作表并使用自动过滤器过滤
Employee Code,如图所示 HERE 并复制所有行(不做任何比较)2.一旦我的输出准备好,我将添加一个带有公式的辅助列来检查S17<>K173. 我将再次在这个辅助列上使用自动过滤器来删除不需要的行。 4. 最后我会保留必要的列并删除不必要的列。 -
上述方法的2大好处 1.避免多次循环查找员工ID。 2. 避免在循环中多次检查
S17<>K17。