excel 如果列指示为X [已关闭],则在前20行上运行代码

wz1wpwve  于 2023-03-31  发布在  其他
关注(0)|答案(1)|浏览(104)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
我已经编写了在第二行上运行的代码,现在我想让它在前20行上运行,如果我用“x”指示第23列。
我好像没法让它工作:

Dim i as Long
Dim j as long
Dim Seat as String
i = 2

For i = 2 To 20 And Cells(i, 23).Value = "x"
j = i
Seat = Cells(j, 5) 'an example of a string that uses i as basis

'... my code

Next i

End Sub

当我运行宏时,它会在每一行上运行代码,即使没有用“x”标记
谁能告诉我,如果在列中标记了要运行的代码,如何正确地循环每行的代码?

ajsxfq5m

ajsxfq5m1#

for-command不允许任何额外的条件,它运行一个循环,进行特定次数的迭代。
将条件放入额外的If-语句中:

For i = 2 To 20 
    If Cells(i, 23).Value = "x" Then
        ...
    End If
Next i

提示:告诉VBA总是在你想要的工作表上工作。使用你的代码,你将在活动工作表上工作,而这并不总是你想要的工作表。有关详细信息,请花时间阅读How to avoid using Select in Excel VBA
对于那些好奇写作时会发生什么的人来说

i = 2
For i = 2 To 20 And Cells(i, 23).Value = "x"
   (...)
Next

VBA将计算20 And Cells(i, 23).Value = "x"项并将其转换为数字。它将首先检查Cells(2, 23)的值:如果这是"x",则项Cells(i, 23).Value = "x"将是True,表示为-1,这是所有位都设置为1的位模式。现在VBA将计算20 And -1(使用算术And),结果为20。
在循环开始之前,该项只计算一次,因此循环将从2运行到20。
然而,如果Cells(i, 23)中的值不同,则项Cells(i, 23).Value = "x"将是False,其表示为0(所有位都为0)。20 And 0将为0,因此循环根本不会运行。

相关问题