Поиск по списку случайных файлов в каталоге и переименование файлов на основе значения ячейки - PullRequest
0 голосов
/ 12 декабря 2018

РЕДАКТИРОВАТЬ: Включен мой код.

Я все еще относительно новичок в VBA, поэтому, пожалуйста, потерпите меня:

Я пытаюсь написать код, который будет проходить через папку и циклчерез все файлы (имена файлов будут случайными) и переименуйте их на основе значения определенной ячейки, C12 в моем случае.Для примера:

Если C12 в файле = A, тогда имя файла должно быть 1, если C12 в файле = B, тогда имя файла должно быть 2, если C = 3 и так далее.

Я собрал следующий код:

Let Files = Dir(Path & "\*.xlsx")

Do While Files <> ""
Set X = Workbooks.Open(Path & "\*.xlsx", True, True)
X.Saved = True

If X.Sheets("Sheet1").Range("C12").Value = "VALUE1" Then
   Name Path & File As Path & NAME1
X.Close

ElseIf X.Sheets("Sheet1").Range("C12").Value = "VALUE2" Then
    Name Path & File As Path & NAME2
X.Close
End If

File = Dir()

Loop

Как я понимаю, код должен пройти через каждый файл (из-за File = Dir()), открыть его и запустить IFВ приведенном выше заявлении переименуйте файл, а затем перейдите к следующему файлу в каталоге и сделайте то же самое.Но когда я запускаю его, он каждый раз открывает только один и тот же файл.Есть мысли о том, почему?

Надеюсь, что это имеет смысл.Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Нашел решение из превосходного объяснения, почему оно не работает в этом посте: Сбой цикла VBA Excel завершается неудачей, когда в цикл добавляется команда открытия и закрытия

Добавлен дополнительный сабкак предложил YowE3K и теперь он отлично работает!

0 голосов
/ 12 декабря 2018

два файла не могут иметь одинаковое имя в одном и том же каталоге, поэтому вы не можете назвать более одного файла как «1». Вы хотите сказать, что хотите переименовать файл в то, что было раньше, плюс «1»??Предполагая, что вы это делаете - и предполагая, что вы хотите добавить 1 к имени, а не к расширению, тогда

Sub RenameFiles
Const dirholdingfiles = "C:\Test"
dim sFileName as string
dim postpend as string
postpend = asc(ucase(range("c12")))-64
sfilename=dir(dirholdingfiles)
do while sfilename <> ""
movefile dirholdingfiles & "\" & sfilename dirholdingfiles & "\" & left(sfilename,len(sfilename)-4) & postpend & right(sfilename,4)
sfilename = dir()
loop
end sub

(записано на моем телефоне - не проверено, возможны опечатки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...