概述
我目前正在研究一个简单的函数来帮助验证数组的起始位置。我正在使用 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”时显示“日期”???
尝试
Public Function ArrayStart() As Variant
Range("A1").Select
Do
ActiveCell.Offset(1, 0).Select
Loop Until (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
避免使用ActiveCell
,请参阅此了解详情。更高效的代码将是
Public Function ArrayStartMMM() As Variant
Dim rng As Range
Set rng = Range("A1")
Do
Set rng = rng.Offset(1, 0)
Loop Until (rng.Value = "Date" Or _
rng.Value = "Open" Or _
rng.Value = "High" Or _
rng.Value = "Low" Or _
rng.Value = "Close" Or _
rng.Value = "Adj Close" Or _
rng.Value = "Volume")
ArrayStart = rng.Row
End Function
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句