Я заметил, что если вы применяете метод SpecialCells к диапазону, а затем индексируете элементы результирующей коллекции, то возвращаются все элементы исходного диапазона, а не нового диапазона, основанного на критериях SpecialCells.

Sub test()

    Dim i As Range

    Selection.SpecialCells(xlCellTypeConstants).Select

    For Each i In Selection
        Debug.Print i
    Next

End Sub

Например, если вы запустите приведенный выше код на основе диапазона, состоящего из константы, за которой следует формула, а затем константа, а затем проверьте элементы Selection в окне Immediate, вы получите значения: 1, 2, 3 ( см. изображение ниже).

Однако, если вы выполняете итерацию в Selection, значения 1 и 3 возвращаются, как и ожидалось (опять же, см. Изображение ниже). Кто-нибудь знает, почему возвращаемые значения отличаются в каждом случае?

1 ответ1

0

Ситуации для тестирования коллекции в B1:B3:

  1. 1,2,3 .
  2. 1 =2, 3 .
  3. 1, =a1+a2, 3 .

    Sub TestofCollection()
      Dim Collection1 As Collection
       Dim n As Integer
        Dim x As Integer
    
       Set Collection1 = New Collection
    
       n = 1
    
      On Error Resume Next
         For Each Cell In Range("B1:B3")
            Collection1.Add n, CStr(Cell.Value)
            n = n + 1
        Next Cell
     On Error GoTo 0
    
     For x = 1 To Collection1.Count
        Range("C" & x).Value = Collection1.Item(x)
     Next x
    
    End Sub
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .