Перебирая файлы в папке, код прерывается, если утверждение ложно в единичный раз - PullRequest
0 голосов
/ 14 июля 2020

Я работаю над макросом Excel для l oop через файлы в папке, я просматриваю файлы в поисках определенной строки в имени файла, и если он находит файл с этой строкой в ​​его имени , он устанавливает для определенной ячейки значение 1.

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

Вот что у меня:

'loop through files in folder checking if value in B column is present


Dim MyObj As Object, MySource As Object, file As Variant
file = Dir("dummydirectory")



Dim rng As Range, cell As Range
Set rng = Range("B164:B1533")
Dim targetcell As Range


For Each cell In rng
 Do While (file <> "")
   Set targetcell = cell.Offset(0, 12) 'sets targetcell 12 columns to the right of the original (B -> N)
      If InStr(file, cell.Value) > 0 Then
         targetcell.Value = 1
         Exit Do
      End If
     file = Dir
  Loop
  
Next cell
End Sub

'current issues:
'as soon as the the if statement is false once, it will never set another cell to 1
'ie: as soon as one cell is not set to 1, it stops working essentially

Я подумал, может быть, это имел какое-то отношение к месту размещения file = Dir, я поместил его вне do l oop в оператор if, и, похоже, ничего не работает.

Мы будем очень благодарны за вашу помощь!

1 Ответ

1 голос
/ 14 июля 2020

Нужно сбрасывать file после каждого Loop. Ниже приведен более эффективный способ сделать это:

For Each cell In rng
 file = Dir("dummydirectory")
 Do 
   Set targetcell = cell.Offset(0, 12) 'sets targetcell 12 columns to the right of the original (B -> N)
      If InStr(file, cell.Value) > 0 Then
         targetcell.Value = 1
         Exit Do
      End If
     file = Dir
  While (file <> "")
  
Next cell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...