Как и многие, я довольно неопытен в 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