Как использовать несколько findnext - PullRequest
0 голосов
/ 06 ноября 2019

Как и многие, я довольно неопытен в VBA, но мне нравится этот сайт, чтобы находить ответы, поэтому я решил поставить свою проблему здесь и посмотреть, что произойдет.

Я пытаюсь найти в Таблице 3 3 различных значения в столбце состояния, а при обнаружении получить значение CellID, найти его в Таблице 4, найти все совпадения и возвращаемые значения из Таблицы 4 и записать их вТаблица 1. Затем продолжайте первый поиск до тех пор, пока в Table1 не будет произведен полный поиск всех трех значений состояния.

Я использую цикл For / Next для определения нужных значений состояния, затем смещаюсь, чтобы получить соответствующие значения при совпадениинайден. То, с чем я борюсь, - это чтобы оба поиска работали вместе и полностью.

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

    Option Explicit
Public CellID As String, Public CellMDS As String, Public CellStatus As String
Public CellBON As String, Public CellPON As String, Public CellStat As String
Public CellPN As String, Public CellDesc As String, Public CellEDD As String
Public Find1 As String, Public Find2 As String, Public stat As String
Public x As Integer, Public rng1 As Range, Public rng2 As Range
Public rngX As Range, Public FirstAddress As String

Public Sub Search()
' Status matches I'm looking for
    For X = 1 To 3
        If X = 1 Then Stat = "NMCS"
        If X = 2 Then Stat = "NMCB"
        If X = 3 Then Stat = "PMCS"

'Search Table1 for status and get CellID
With Worksheets("Daily").Range("table1[status]")
    Set Rng1 = .Find(Stat, LookIn:=xlValues)
    If Not Rng1 Is Nothing Then
        Find1 = Rng1.Address
        Do
            CellID = Rng1.Offset(0, -11).Value
            CellMDS = Rng1.Offset(0, -10).Value
            MsgBox CellID & " " & CellMDS 'msgbox not needed, only here for testing results
            Set Rng1 = .FindNext(Rng1)
        If Rng1 Is Nothing Then
            GoTo DoneFinding
            End If

'Search Table2 For CellID and Get Part info
With Worksheets("Supply").Range("table4[Mark For]")
    Set Rng2 = .Find(CellID, LookIn:=xlValues)
    If Not Rng2 Is Nothing Then
        Find2 = Rng2.Address
        Do
            'Get Part information
            CellPN = Rng2.Offset(0, 3).Value
            CellBON = Rng2.Offset(0, -8).Value
            CellPON = Rng2.Offset(0, 9).Value
            CellStat = Rng2.Offset(0, -5).Value
            CellDesc = Rng2.Offset(0, -3).Value
            CellEDD = Rng2.Offset(0, 12).Value

'msgbox only used to verify results
            MsgBox "Part Number: " & CellPN & vbNewLine & _
            "Description: " & CellDesc & vbNewLine & _
            "EDD: " & CellEDD & vbNewLine & _
            "BO Num: " & CellBON & vbNewLine & _
            "PO Num: " & CellPON & vbNewLine & _
            "Status: " & CellStat 'test for values -DELETE msgbox

            Set Rng2 = .FindNext(Rng2)
        If Rng2 Is Nothing Then
            GoTo DoneFinding2
        End If
        Loop While Rng2.Address <> Find2
    End If
DoneFinding2:
End With

'returns to original search

            Loop While Rng1.Address <> Find1
        End If
DoneFinding:
End With
    Next X
End Sub
...