Внутри Loop, который у меня есть, я хочу использовать функцию «Найти», но, похоже, она меня ударяет из цикла после одной итерации, когда я пытаюсь это сделать.Excel Macro - использование find в do Loop
FYI, я не силен в VB, лучше с веб-кодом, например: PHP и т.д.
Если я закомментируйте строку, начинающуюся sfFamilyCol = wsSFDC.Rows (1) ...... то цикл будет работать столько раз, сколько должен. С этой строкой там, она не бросает ошибку, но она проходит только один раз.
Мне интересно, есть ли какой-то особый способ обработки. Искать в цикле? Или что-то еще, о чем я не знаю? Любая помощь приветствуется ...
Option Explicit
Sub mapTags()
Dim wsMP As Worksheet: Set wsMP = ActiveWorkbook.Sheets("MP")
Dim wsSFDC As Worksheet: Set wsSFDC = ActiveWorkbook.Sheets("SFDC")
Dim wsMap As Worksheet: Set wsMap = ActiveWorkbook.Sheets("Mapping")
Dim wsUp As Worksheet: Set wsUp = ActiveWorkbook.Sheets("Upload")
Dim wsCol As Worksheet: Set wsCol = ActiveWorkbook.Sheets("MP_Columns")
Dim wsFmt As Worksheet: Set wsFmt = ActiveWorkbook.Sheets("Tag Name Formats")
Dim i As Long, j As Long, k As Long
Dim SFDCrow As Long, SFDCID As String, sfCol As Long
Dim MPID As String, mpTagGroup As String, mpTagName As String, mpTagCol As Long, mapTagName As String
Dim sfTagFamily As String, sfTagGroup As String, sfTagName As String, sfFamilyCol As Long, sfGroupCol As Long
Dim oRange As Range, aCell As Range, bCell As Range
Application.ScreenUpdating = False
''Get Contact Record
For i = 2 To 2 Step -1 'Change i to 25000 later...
MPID = wsMP.Cells(i, 1).Value
sfCol = wsSFDC.Columns(2).Find(What:=MPID, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Row
'MsgBox sfCol
''Go Through each MP Contact Tag Colum
For k = 10 To 1 Step -1
mpTagGroup = wsCol.Cells(k, 1).Value
If Not mpTagGroup = "" Then
mpTagCol = wsMP.Rows(1).Find(What:=mpTagGroup, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column
'' Get the Tag Name
mpTagName = wsMP.Cells(i, mpTagCol).Value
If Not mpTagName = "" Then
''Get the Mapped SFDC Tags
Set oRange = wsMap.Columns(1)
Set aCell = oRange.Find(What:=mpTagGroup, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
'MsgBox mapTagGroup
If Not aCell Is Nothing Then
Set bCell = aCell
'FoundAt = aCell.Row
Do
Set aCell = oRange.FindNext(After:=aCell)
If Not aCell Is Nothing Then
If aCell.Row = bCell.Row Then Exit Do
'FoundAt = FoundAt & ", " & aCell.Row
mapTagName = wsMap.Cells(aCell.Row, 2).Value
If mapTagName = mpTagName Then
sfTagFamily = wsMap.Cells(aCell.Row, 4).Value
sfTagGroup = wsMap.Cells(aCell.Row, 5).Value
sfTagName = wsMap.Cells(aCell.Row, 6).Value
'MsgBox aCell & " " & mapTagName & ": " & sfTagFamily & " " & sfTagGroup & " " & sfTagName
MsgBox sfTagFamily
''Set the SDDC TAG FAMILY to TRUE
sfFamilyCol = wsSFDC.Rows(1).Find(What:=sfTagGroup, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column
MsgBox sfFamilyCol
End If
Else
Exit Do
End If
Loop
End If
'MsgBox "The Search String has been found in these rows: " & FoundAt
End If
End If
Next k
Next i
End Sub
Это [хорошая статья] (http://www.cpearson.com/excel/FindAll.aspx), поэтому начинайте здесь. Я думаю, вам просто нужно очистить последовательность использования метода * Find Method *. Кроме того, попробуйте изолировать, какая часть не работает, добавив точки останова, чтобы мы могли сосредоточиться на этой строке. – L42
Еще [ссылка] (http://www.siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/) для вашего удовольствия от чтения –