Пожалуйста, измените на вложенный цикл - PullRequest
0 голосов
/ 14 октября 2018

Я отредактировал свое сообщение об ошибке форматирования.Спасибо за отзыв.

Теперь я использую лот «Для каждого», чтобы найти диапазон.Я ищу соответствующее значение в выпадающем списке сначала по вертикали (Столбец (а затем по горизонтали (строки)), затем перехожу к определенному диапазону.

Есть ли способ найти ячейку, содержащую мое значение в выпадающем списке, с помощью цикла, а затем выбратьrange.?

Спасибо. NB: - Пожалуйста, не смейтесь, если вы чувствуете мою программу как комикс. Потому что я узнал все это из поиска в Google.

'Cancel Button`
Private Sub CommandButton2_Click()
Unload UserForm1
End Sub`

'Goto range selection3
Sub CommandButton1_Click()
On Error Resume Next
If ComboBox3.Value = "Select" Then
MsgBox "Please Select a Seller"
Else
Call Show_Page
Unload UserForm1`
End If
End Sub

'select page
Sub Show_Page()

For Each cell In Range("A2:A10")
If cell.Value = Me.ComboBox3.Value Then
Worksheets("p1").Activate
Call Show_Range
Exit For
Exit Sub
End If
Next

For Each cell In Range("B2:B10")
If cell.Value = Me.ComboBox3.Value Then
Worksheets("p2").Activate
Call Show_Range
Exit For
Exit Sub
End If
Next

For Each cell In Range("C2:C10")
If cell.Value = Me.ComboBox3.Value Then
Worksheets("p3").Activate
Call Show_Range
Exit For
Exit Sub
End If
Next

For Each cell In Range("D2:D10")
If cell.Value = Me.ComboBox3.Value Then
Worksheets("p4").Activate
Call Show_Range
Exit For
Exit Sub
End If
Next

For Each cell In Range("E2:E10")
If cell.Value = Me.ComboBox3.Value Then
Worksheets("p5").Activate
Call Show_Range
Exit For
Exit Sub
End If
Next

End Sub

Sub Show_Range()

For Each cell In Worksheets("home").Range("A2:E2")
If cell.Value = Me.ComboBox3.Value Then
ActiveSheet.Range("A1:j106").Select
Exit For
Exit Sub
End If
Next

For Each cell In Worksheets("home").Range("A3:E3")
If cell.Value = Me.ComboBox3.Value Then
ActiveSheet.Range("A111:j216").Select
Exit For
Exit Sub
End If
Next

For Each cell In Worksheets("home").Range("A4:E4")
If cell.Value = Me.ComboBox3.Value Then
ActiveSheet.Range("A221:j326").Select
Exit For
Exit Sub
End If
Next

For Each cell In Worksheets("home").Range("A5:E5")
If cell.Value = Me.ComboBox3.Value Then
ActiveSheet.Range("A331:j436").Select
Exit For
Exit Sub
End If
Next

For Each cell In Worksheets("home").Range("A6:E6")
If cell.Value = Me.ComboBox3.Value Then
ActiveSheet.Range("A441:j546").Select
Exit For
Exit Sub
End If
Next

For Each cell In Worksheets("home").Range("A7:E7")
If cell.Value = Me.ComboBox3.Value Then
ActiveSheet.Range("A551:j656").Select
Exit For
Exit Sub
End If
Next

For Each cell In Worksheets("home").Range("A8:E8")
If cell.Value = Me.ComboBox3.Value Then
ActiveSheet.Range("A661:j766").Select
Exit For
Exit Sub
End If
Next

For Each cell In Worksheets("home").Range("A9:E9")
If cell.Value = Me.ComboBox3.Value Then
ActiveSheet.Range("A771:j876").Select
Exit For
Exit Sub
End If
Next

For Each cell In Worksheets("home").Range("A10:E10")
If cell.Value = Me.ComboBox3.Value Then
ActiveSheet.Range("A881:j986").Select
Exit For
Exit Sub
End If
Next
End Sub

1 Ответ

0 голосов
/ 15 октября 2018

Я думаю, что это может быть то, что вы хотите.SheetNames - это массив, а RangeStrings также являются массивом, чтобы их можно было изменить позже.(примечание: массивы основаны на нуле, и поэтому мы пропускаем элемент с нулевой этикой)

В основном, проходите через ячейки в области ключей только один раз.Затем используйте местоположение столбца найденной ячейки, чтобы определить правильное имя SheetName для активации, и местоположение строки найденной ячейки, чтобы определить правильную RangeString для выбора.Это происходит, когда найдено первое совпадение.(Я не понимаю ваш исходный Exit For, за которым следует Exit Sub -> что вы ожидаете? Может ли быть выбрано более одной страницы?)

'select page
Sub Show_Page()

    ' look only once at all cells in the key area
    For Each aCell In Sheets("home").Range("A2:E10")

        If aCell.Value = Me.ComboBox3.Value Then  '>> OOps, my test only Sheets("home").Cells(1, "A") Then
            Dim sheetNamesArray() As Variant, sheetIndex As Long, theSheet As String
            sheetNamesArray = Array("zero", "offset1", "p1", "p2", "p3", "p4", "p5")
            sheetIndex = aCell.Column   ' numeric value equivalent of "A", ... "E"
            theSheet = sheetNamesArray(sheetIndex)
            Worksheets(theSheet).Activate

            Dim sheetRangesArray() As Variant, rangeIndex As Long, rangeString As String
            sheetRangesArray = Array("zero", "notRow1", "A001;J106", "A111;J216", "A221;J326", "A331;J436", "A441;J546", "A551;J656", "A661;J766", "A771;J876", "A881;J986")
            rangeIndex = aCell.Row      ' numeric value 2...10
            rangeString = sheetRangesArray(rangeIndex)

            ActiveSheet.Range(rangeString).Select

            Exit Sub    ' once we have found it, exit the SUB (and implicitly also the FOR)
        End If

    Next aCell

End Sub

'eliminate Show_Range()
...