0

这个非循环代码执行没有问题:

If InStr(1, Sheets(1).Range("A1"), "blah") > 0 Then
    Sheets(2).Range("A1") = Sheets(1).Range("B1")
End If

但我需要遍历几行;因此,一个循环:

Dim i As Integer
For i = 1 To 10
    If InStr(1, Sheets(1).Cells(i, 1), "blah") > 0 Then
        Sheets(2).Cells(i, 1) = Sheets(1).Cells(i, 2)
    Else Sheets(2).Cells(i, 1) = ""
    End If
Next

循环编译并且不会崩溃,但无法返回任何输出。为什么?

4

3 回答 3

2

将 1 和 0 添加到您的 instr 公式

Instr(1, Sheets(1).Cells(i,1), "blah") > 0

另外,您确定Sheets(2)'s 的值是要更改的值吗?

于 2013-07-31T21:16:48.123 回答
2

这应该有效。还注意到您引用的是单元格而不是单元格中保存的值

***请注意,这是一种糟糕的调试方式,但是...... msgbox 提示符说什么?它应该说 0 或 1,第二个 msgbox 应该告诉您将要放入第二张表中的内容。再次,这是一种完全垃圾的调试方式

Sub Test()
Dim iVal As Integer
    For i = 1 To 10
        iVal = InStr(1, Sheets(1).Cells(i, 2), "blah")
        MsgBox CStr(iVal)
        If iVal > 0 Then
        'go to second sheet column 1 and enter in the value thats in the 2nd column on sheet 1
        MsgBox "Adding to Sheet 2: " & Sheets(1).Cells(i, 2).Value
            Sheets(2).Cells(i, 1).Value = Sheets(1).Cells(i, 2).Value
        End If
    Next
End Sub
于 2013-07-31T21:39:43.947 回答
1

如果你教一个人钓鱼......这不是答案,而是你如何自己解决问题:

通过将光标放在下面的行上并按 F9 在代码中添加断点。

Sheets(2).Cells(i, 1) = Sheets(1).Cells(i, 2)

如果你做对了,那么你会在 VBE 中看到这样的结果:

在此处输入图像描述

按 F5 运行您的代码。

当/如果它击中该线时,VBE 将突出显示该线黄色。这实质上会暂停代码执行,以便您可以检查和跟踪正在发生的事情。在这里您可以输入Debug.Print语句(或MsgBox根据我的示例和上面的 SOrceri 示例),或者您可以使用即时窗口或本地窗口来检查变量及其值(这是更高级的)。

如果“什么都没有”发生(即,这条线永远不会以黄色突出显示),那么我只能想到两件事。

  1. Sheets(1).Cells(i,2)为空,或
  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% 确定问题出在你的逻辑中,它没有充分描述你希望达到的条件和结果。任何人都猜测它的不同之处,除非您可以更彻底地描述您正在尝试做的事情。

于 2013-07-31T22:17:30.500 回答