Все еще удивляетесь, почему ваш обходной путь работает ...
Пожалуйста, проверьте, если вы объявили foundRow как Dim ... as Long
, Dim ... as Range
, Dim ... as Variant
(не рекомендуется) или просто Dim ...
(никогда не рекомендуется). В обоих последних случаях Excel решает за вас, и, возможно, решение работает несколько строк кода раньше, но не здесь.
Range
и Long
будут работать, но есть некоторые различия:
Dim foundRow as Range
...
Set foundRow = objToExcel.ActiveSheet.Range("A2:A20").Find(toSearch)
If Not foundRow Is Nothing Then
MsgBox foundRow.Row
Endif
или
Dim foundRow as Long
...
foundRow = objToExcel.ActiveSheet.Range("A2:A20").Find(toSearch).Row
MsgBox foundRow
Первое решение лучше, так как вы также можете справиться с не найденным.
Если он не найден по какой-либо причине (Range.Find даже не находит в скрытых или сгруппированных ячейках), прямое назначение во втором решении вызывает ошибку.