【发布时间】:2017-09-03 00:32:15
【问题描述】:
概述
我目前正在研究一个简单的函数来帮助验证我的数组的起始位置。我正在使用 DO 语句,然后只是偏移活动单元格,直到满足我的 DO 语句的条件。
代码
Public Function ArrayStart() As Variant
Range("A3").Select
Do
ActiveCell.Offset(1, 0).Select
Loop While (ActiveCell.Value <> "Date" Or _
ActiveCell.Value <> "Open" Or _
ActiveCell.Value <> "High" Or _
ActiveCell.Value <> "Low" Or _
ActiveCell.Value <> "Close" Or _
ActiveCell.Value <> "Adj Close" Or _
ActiveCell.Value <> "Volume")
ArrayStart = ActiveCell.Row
End Function
Excel 工作表中的数据
Date Open High Low Close Adj Close Volume
12/22/1998 19.05 19.05 18.85 18.94 9.98 55900
12/23/1998 18.86 19.22 18.86 19.22 10.13 78800
12/24/1998 19.22 19.34 19.15 19.34 10.20 43800
12/28/1998 19.33 19.33 19.04 19.09 10.06 51900
12/29/1998 19.12 19.29 18.89 19.29 10.17 100800
12/30/1998 19.19 19.32 19.09 19.22 10.13 154600
12/31/1998 19.22 19.24 19.04 19.04 10.04 65400
日期位于“A4”范围内,所有数据的整个范围都位于“A4:G11”范围内
问题
代码一直有效,直到到达 Loop While 部分,即使活动单元格是“A4”,也就是“日期”,它也不会识别它,并且会继续循环。
当我取出 OR 条件并使用此代码时,它可以完美运行
Loop While (ActiveCell.Value <> "Date")
我正在运行相同的整体代码,但消除了 OR 语句,它工作得很好,我没有收到任何错误,我只是不明白为什么它不工作。此外,当我将鼠标悬停在 vba 窗口中的 activecell.value 上时,它会在到达单元格“A4”时显示“日期”???
【问题讨论】:
-
考虑一个更简单的语句 -
x <> "A" Or x <> "B"。如果 x 是"A",那么它不是"B",因此语句变为False Or True,即True。如果 x 是"B",那么它不是"A",因此语句变为True Or False,即True。如果 x 是"C",那么它不是"A"或"B",因此语句变为True Or True,即True。换句话说,它总是True.