Прежде всего, я бы настоятельно предложил бы удалить On Error Resume Next
, так как оставив его, это приведет к страданиям и душевной боли только тогда, когда что-то сломается, и вы не получите никакого сообщения об ошибке. Если вы получаете сообщение об ошибке с его удалением, вы должны отследить источник ошибки и либо исправить его, либо обработать его с помощью соответствующих защитных предложений или обработки ошибок.
Во-вторых, я думаю Вы хотите многократно искать во всем Array_SubFolders
файл с prodName
в имени любого из файлов в каждой подпапке. Если это так, я бы предложил что-то вроде этого:
Dim index As Integer
index= 0
Do While index < UBound(Array_SubFolders)
Dim fileName As String
fileName = Dir(Array_SubFolders(index) & "\*.xlsb")
Do While fileName <> ""
FullPathFileName = Array_SubFolders(index) & "\" & fileName
If (Left(fileName, 12) = "Ass_Sheet_") Then
Dim prodName As String
prodName = ThisWorkbook.Sheets("Master").Cells(MasterRow, 1).Value
If (InStr(fileName, prodName) > 0) Then
Call prc_Import_Values(fileName)
MasterRow = MasterRow + 1
index = 0
End If
End If
fileName = Dir()
Loop
index = index+ 1
Loop
Вместо использования цикла For...Next
и попытки сброса индекса (который обычно рекомендуется использовать), здесь используется Do While...Loop
и сбрасывает индекс, когда находит совпадение в строке If (InStr(fileName, prodName) > 0) Then
. Если это неправильное место, вы можете переместить index = 0
туда, где происходит фактическое сопоставление.
Также обратите внимание, что я изменил idx
на index
. Гласные дешевы, и я считаю, что непостоянные переменные делают их более читабельными. Кроме того, благодаря автоматическому заполнению VBIDE, набрав in<ctrl-space>
, вы, вероятно, получите тот же результат при том же количестве нажатий клавиш.