Страницы: 1
RSS
Как в VBA проверить, существует ли папка?
 
Коллеги, прошу помощи, не могу разобраться в чем проблема, гугл конкретики не внес.
Как в операторе if указать условие "если папки не существует"?  Должно получиться как то примерно так
Код
dim monts as string
Sub test ()
monts = Range("A1")
IF Dir ("C:\Users\ivanp\Desktop\Teamplate AVR\" & months & "") <> 0 then
MkDir ("C:\Users\ivanp\Desktop\Teamplate AVR\" & months & "")
esle
kill ("C:\Users\ivanp\Desktop\Teamplate AVR\" & months & ".xlsx")
end sub
Но данная строка соответственно не работает. Подскажите пожалуйста как правильно это записать.
 
Код
...........
    monts = Range("A1").Value
    sFldr = "C:\Users\ivanp\Desktop\Teamplate AVR\" & months & "\"
    If Dir(sFldr, vbDirectory) = "" Then
          MkDir sFldr
    Else
...........
 
Благодарю Вас за ответ, если вас не затруднит, просветите пещерного человека как это работает...
Это некая переменная? Что делает эта строчка?
Код
sFldr = "C:\Users\ivanp\Desktop\Teamplate AVR\" & months & "\"
 
В переменную записываем полный путь к проверяемой папке

P.S.
Вначале не обратил внимания... Зачем в последней строке к имени папки дописываете расширение?
 
название темы:
проверить наличие папки, если нет - создать ее, если есть - удалить одноименный xlsx-файл
Код
Sub test()
  Dim f$
  f = "C:\Users\ivanp\Desktop\Teamplate AVR\" & Range("A1")
  If Dir(f, vbDirectory) = "" Then
    MkDir f
  esle
    If Dir(f & ".xlsx") <> "" Then Kill f & ".xlsx"
  End If
End Sub
Изменено: Ігор Гончаренко - 27.01.2020 01:46:32
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
vikttur написал: If Dir(sFldr, vbDirectory) = "" Then  MkDir sFldr
Я так понимаю что данная строчка удаляет все файлы с данным расширением внутри папки...

Ігор Гончаренко, благодарю вас!
 
Цитата
Антон91 написал: Я так понимаю что данная строчка удаляет...
Неправильно понимаете. Данная строка проверяет наличие папки и если ее нет - то (MkDir) создает такую папку.
 
А как написать конструкцию в цикле такого вида:
Если папка существует (путь к паке) Then продолжить выполнение макроса, else перейти к следующему шагу цикла?
 
Доброе время суток
Цитата
GoodPaul написал:
продолжить выполнение макроса,
какого макроса?
Цитата
GoodPaul написал:
перейти к следующему шагу цикла?
а где собственно цикл?
 
про оператор If слышали? используйте, он справится
Изменено: Ігор Гончаренко - 01.02.2020 13:26:59
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Прошу прощения, имею скромное представление о VBA
Попробую описать на примере, который был выше

Sub test()
 Dim f$, i
for i = 1 to 100
 f = "C:\Users\ivanp\Desktop\Teamplate AVR\" & Cells(i,1)
 If Dir(f, vbDirectory) = "" Then 'эта строчка, если правильно понимаю, читается как если папка НЕ существует, то
   "переходим к следующему шагу цикла"
 esle
   "продолжаем выполнять макрос, который открывает файл из этой папки"
 End If
next
End Sub
Изменено: GoodPaul - 01.02.2020 14:22:52
 
Что-то я не улавливаю логику... Если папка существует то проходим мимо, а если папки нет - то открываем из неё файл?
Вообще в Винде есть АПИ, а там есть такая удобная штука как MakeSureDirectoryPathExists, это если нужно гарантированно иметь папку.
А если в названиях важна диакритика - то тоже есть компонент, но его нужно поискать... нашёл: SHCreateDirectoryEx
Изменено: Hugo - 01.02.2020 14:12:14
 
если вот эта конструкция значит, что папка НЕ существует If Dir(f, vbDirectory) = "", то все логично. Или неправильно понимаю ее и она означает, что папка существует?  
 
В комментарии Вы написали "существует",  это и ввело в заблуждение

Вы уже написали цикл.  И условие вписано...  В чем вопрос?
 
извиняюсь, не доглядел по поводу НЕ существует)

Как прописать на VBA вот эти две строчки:
"переходим к следующему шагу цикла"
"продолжаем выполнять макрос"
 
Цитата
GoodPaul написал:
"переходим к следующему шагу цикла"
- вот конкретно такого нет.
Но если перевернуть код из №11 так - если условие не выполняется то работаем, то и будет так как Вы хотите.
 
Цитата
GoodPaul написал: переходим к следующему шагу цикла
Для этого ничего не нужно писать.
Код
For i = 1 To 100
' что-то делаем
Next i

For i = 1 To 100
    If 1=0 Then  
        ' что-то делаем
    End If
Next i

И первый, и второй цикл 100 раз переходит к следующему шагу
Страницы: 1
Наверх