如果你教一个人钓鱼......这不是答案,而是你如何自己解决问题:
通过将光标放在下面的行上并按 F9 在代码中添加断点。
Sheets(2).Cells(i, 1) = Sheets(1).Cells(i, 2)
如果你做对了,那么你会在 VBE 中看到这样的结果:
按 F5 运行您的代码。
当/如果它击中该线时,VBE 将突出显示该线黄色。这实质上会暂停代码执行,以便您可以检查和跟踪正在发生的事情。在这里您可以输入Debug.Print
语句(或MsgBox
根据我的示例和上面的 SOrceri 示例),或者您可以使用即时窗口或本地窗口来检查变量及其值(这是更高级的)。
如果“什么都没有”发生(即,这条线永远不会以黄色突出显示),那么我只能想到两件事。
Sheets(1).Cells(i,2)
为空,或
- 布尔表达式中的条件永远不会满足。
断点将允许您调试并找出哪些(或我没有想到的潜在其他条件)可能导致明显的“错误”。
更新我认为问题真的是你的逻辑,不幸的是。我将尝试提供一个尽可能明确的示例。
Sub Test()
Dim i As Integer
Dim sht1Cell As Range
Dim sht2Cell As Range
For i = 1 To 10
Set sht1Cell = Sheets(1).Cells(i, 1)
Set sht2Cell = Sheets(2).Cells(i, 1)
'Now, test whether "blah" is found in sht1Cell:
If InStr(1, sht1Cell.Value, "blah") > 0 Then
'If it contains "blah", then put this value in sheet 2.
'Note: you were previously putting values from Column B.
' but this is taking the exact cell value from
' column A, so I KNOW this value cannot be a blank value.
sht2Cell.Value = sht1Cell.Value
Else:
'Does not contain "blah", so make sheet 2 have a blank
'This blanks out any value that might have previously been
'present in sh2Cell.
sht2Cell.Value = ""
End If
Next
End Sub
如果这没有达到预期的结果,我 100% 确定问题出在你的逻辑中,它没有充分描述你希望达到的条件和结果。任何人都猜测它的不同之处,除非您可以更彻底地描述您正在尝试做的事情。