Как пропустить ячейку при использовании tabArray? - PullRequest
1 голос
/ 20 июня 2019

Я использую tabArray на листе, который будет циклически проходить по ячейкам F13, F17 и т. Д. До F31 (все нечетные ячейки).Каждая ячейка представляет собой выпадающий список, чтобы пользователь мог сделать выбор.Если ячейка в массиве имеет серый фон, я хочу перейти к следующей ячейке в массиве.Например, F21 имеет серый фон, однако, если я сделаю выделение в F13, следующая ячейка, к которой он перемещается, будет F23.Каждая ячейка, в которой я делаю выбор, изменяется до того, как ячейка F21 автоматически переместится на F23.

Я пробовал "Exit For" и "GoTo", но безуспешно.

tabArray = Array  ("F13","F15","F17","F19","F21","F23","F25")

For I = LBound(tabArray) to UBound (tabArray) 
      If tabArray(I) = target.address(0,0) then 
       If I = UBound(tabArray) then 
       Me.Range(tabArray(LBound(tabArray))).Activate 

      Else  
      Me.Range(tabArray(I+1)).Activate

      end if 
  ElseIf Range(tabArray(I)).Interior.Colorindex = 15 then 
      If I = UBound(tabArray) then 
      Me.Range(tabArray(LBound(tabArray))).Activate 

     Else  
     Me.Range(tabArray(I+1)).Activate

     end if 
   end if 
Next I 

Если фон ячейки серый для F23, и я делаю выделение в F13, я хочу, чтобы следующая ячейка, в которую он перемещается, была F15, но фактический результат - то, что она перемещается в ячейку F25.

1 Ответ

1 голос
/ 20 июня 2019

Вы должны быть осторожны, когда пропускаете, используя ваш tabArray.Пример ниже показывает один из способов сделать это.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tabArray As Variant
    tabArray = Array("F13", "F15", "F17", "F19", "F21", "F23", "F25")

    Dim i As Long
    Dim j As Long
    Dim nextHighlightCell As Long
    For i = LBound(tabArray) To UBound(tabArray)
        If tabArray(i) = Target.Address(0, 0) Then
            '--- a cell has changed within our tab list, so now find
            '    the next cell in the array that is not highlighted

            '--- increment to the next array position or wrap around
            If i = UBound(tabArray) Then
                j = LBound(tabArray)
            Else
                j = i + 1
            End If

            nextHighlightCell = -1
            Do While Not j = i
                If Range(tabArray(j)).Interior.ColorIndex = 15 Then
                    '--- this one is gray, so skip it
                    If j = UBound(tabArray) Then
                        j = LBound(tabArray)
                    Else
                        j = j + 1
                    End If
                Else
                    nextHighlightCell = j
                    Exit Do
                End If
            Loop

            '--- skip to the next indicated cell
            If Not nextHighlightCell = -1 Then
                Range(tabArray(nextHighlightCell)).Activate
                Exit For
            End If
        End If
    Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...