我在工作表上使用的tabArray将会循环遍历单元格F13,F17等,直到F31(所有奇数编号的单元格)。每个单元格都是一个下拉菜单,供用户进行选择。如果数组中的单元格具有灰色的背景,我希望它跳到数组中的下一个单元格。例如,F21具有灰色背景,但是,如果我在F13中进行选择,它将移动到的下一个单元格是F23。我在单元格F21之前进行选择更改的每个单元格都将自动移动到F23。
我尝试“退出”和“转到”没有成功。
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单元格。
答案 0 :(得分:1)
您必须小心如何跳过使用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