Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2022, 20:48   #1
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию VBA Создать папку с именем файла и переместить по списку

Привет Всем!

Рад снова обратиться к вам за помощью...

Задача:
Исходная позиция: Столбец A, B
Желаемая позиция: Столбец C

Для файлов в папке нужно создать папку по заданному названию (столбец H) и переместить туда файлы заданные в столбце B

*** В столбце H названия могут повторяться
*** Имена файлов не обязательно равны имени новой папки

Заранее огромное спасибо за помощь!
Вложения
Тип файла: xlsx test.xlsx (15.1 Кб, 7 просмотров)
Jungo must die!!! (C) Bill Gates.
jungo вне форума Ответить с цитированием
Старый 17.01.2022, 22:14   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

тоесть в папке C:\Users\Alexg\Desktop\VBA\ALEX надо создать 21 подпапку с именами из столбца Н. И в каждую из подпапок скопировать 21 файл с именами столбца В из папки C:\Users\Alexg\Desktop\VBA итого надо создать 441 файл и 21 папку?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 18.01.2022, 12:11   #3
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
тоесть в папке C:\Users\Alexg\Desktop\VBA\ALEX надо создать 21 подпапку с именами из столбца Н. И в каждую из подпапок скопировать 21 файл с именами столбца В из папки C:\Users\Alexg\Desktop\VBA итого надо создать 441 файл и 21 папку?
Привет,

Нужно создать 21 подпапку с именами из столбца Н.
Файлы из папки C:\Users\Alexg\Desktop\VBA перенести по заданным подпапкам (которые мы только что создали) строго по столбцу C (то-есть каждый файл в столбце B в подпапку в столбце C).
Jungo must die!!! (C) Bill Gates.
jungo вне форума Ответить с цитированием
Старый 18.01.2022, 12:23   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Так с чем помочь-то или надо все сделать вместо Вас?


1. Создание папки: https://best-excel-tutorial.com/57-v...r-in-excel-vba
2. Копирование файлов: https://www.rondebruin.nl/win/s3/win026.htm
комбинируйте.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 18.01.2022, 19:49   #5
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Так с чем помочь-то или надо все сделать вместо Вас?


1. Создание папки: https://best-excel-tutorial.com/57-v...r-in-excel-vba
2. Копирование файлов: https://www.rondebruin.nl/win/s3/win026.htm
комбинируйте.
Я действительно просмотрел весь и-нет. Почти добрался до цели, но мне не хватает опыта поправить макрос. Петому хоть и редковато тут, но знаю что легче с нуля чем копаться в чужом.

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
2. Копирование файлов: https://www.rondebruin.nl/win/s3/win026.htm
Мне нужно, что бы новый пач был динамичным - столбец C (подпапки каждый раз разные)
Файлы любых форматов строго по столбцу B
Jungo must die!!! (C) Bill Gates.
jungo вне форума Ответить с цитированием
Старый 19.01.2022, 09:32   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от jungo Посмотреть сообщение
Я действительно просмотрел весь и-нет.
Такое только Чак Норрис умеет.


Код:
Option Explicit

Sub DoWork()
    Dim iLastRow As Integer
    Dim i As Integer
    Dim sFolderCopyToPath As String
    Dim sFileCopyFrom As String
    Dim sFileCopyToPath As String
    iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 2 To iLastRow
        sFolderCopyToPath = Cells(i, "C")
        sFileCopyFrom = Cells(i, "A") & "\" & Cells(i, "B")
        sFileCopyToPath = sFolderCopyToPath & "\" & Cells(i, "B")
        If CreateFolder(sFolderCopyToPath) Then
            sFileCopyToPath = sFileCopyToPath
            FileCopy sFileCopyFrom, sFileCopyToPath
        Else
            MsgBox "Ошибка создания папки из строки " & i
        End If
    Next i
End Sub



Function CreateFolder(ByVal sPath As String) As Boolean

  'create full sPath at once, if required
  'returns False if folder does not exist and could NOT be created, True otherwise
  'sample usage: If CreateFolder("C:\toto\test\test") Then debug.print "OK"

    Dim fs As Object
    Dim FolderArray
    Dim Folder As String, i As Integer, sShare As String

    If Right(sPath, 1) = "\" Then sPath = Left(sPath, Len(sPath) - 1)
    Set fs = CreateObject("Scripting.FileSystemObject")
    'UNC path ? change 3 "\" into 3 "@"
    If sPath Like "\\*\*" Then
        sPath = Replace(sPath, "\", "@", 1, 3)
    End If
    'now split
    FolderArray = Split(sPath, "\")
    'then set back the @ into \ in item 0 of array
    FolderArray(0) = Replace(FolderArray(0), "@", "\", 1, 3)
    On Error GoTo hell
    'start from root to end, creating what needs to be
    For i = 0 To UBound(FolderArray) Step 1
        Folder = Folder & FolderArray(i) & "\"
        If Not fs.FolderExists(Folder) Then
            fs.CreateFolder (Folder)
        End If
    Next
    CreateFolder = True
hell:
End Function
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 19.01.2022 в 09:35.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.01.2022, 14:14   #7
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Такое только Чак Норрис умеет.
Убил )))))

Огромное спасибо за помощь и юмор.
Буду тестировать.
Jungo must die!!! (C) Bill Gates.
jungo вне форума Ответить с цитированием
Старый 19.01.2022, 14:53   #8
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Такое только Чак Норрис умеет.


Код:
Option Explicit

Sub DoWork()
    Dim iLastRow As Integer
    Dim i As Integer
    Dim sFolderCopyToPath As String
    Dim sFileCopyFrom As String
    Dim sFileCopyToPath As String
    iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 2 To iLastRow
        sFolderCopyToPath = Cells(i, "C")
        sFileCopyFrom = Cells(i, "A") & "\" & Cells(i, "B")
        sFileCopyToPath = sFolderCopyToPath & "\" & Cells(i, "B")
        If CreateFolder(sFolderCopyToPath) Then
            sFileCopyToPath = sFileCopyToPath
            FileCopy sFileCopyFrom, sFileCopyToPath
        Else
            MsgBox "Ошибка создания папки из строки " & i
        End If
    Next i
End Sub



Function CreateFolder(ByVal sPath As String) As Boolean

  'create full sPath at once, if required
  'returns False if folder does not exist and could NOT be created, True otherwise
  'sample usage: If CreateFolder("C:\toto\test\test") Then debug.print "OK"

    Dim fs As Object
    Dim FolderArray
    Dim Folder As String, i As Integer, sShare As String

    If Right(sPath, 1) = "\" Then sPath = Left(sPath, Len(sPath) - 1)
    Set fs = CreateObject("Scripting.FileSystemObject")
    'UNC path ? change 3 "\" into 3 "@"
    If sPath Like "\\*\*" Then
        sPath = Replace(sPath, "\", "@", 1, 3)
    End If
    'now split
    FolderArray = Split(sPath, "\")
    'then set back the @ into \ in item 0 of array
    FolderArray(0) = Replace(FolderArray(0), "@", "\", 1, 3)
    On Error GoTo hell
    'start from root to end, creating what needs to be
    For i = 0 To UBound(FolderArray) Step 1
        Folder = Folder & FolderArray(i) & "\"
        If Not fs.FolderExists(Folder) Then
            fs.CreateFolder (Folder)
        End If
    Next
    CreateFolder = True
hell:
End Function
Всё прекрасно работает!!!

Одно "но. . . "
А если в списке есть файл, которого не существует, можно просто пропустить и потом выдать error каких файлов не было?
Jungo must die!!! (C) Bill Gates.
jungo вне форума Ответить с цитированием
Старый 19.01.2022, 16:31   #9
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от jungo Посмотреть сообщение
А если в списке есть файл, которого не существует, можно просто пропустить и потом выдать error каких файлов не было?
it's your hometask
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование файла в другую папку под новым именем в процессе выполнения макроса artyom2104 Microsoft Office Excel 5 16.05.2018 10:18
File1 .Дана строка S. Если S является допустимым именем файла, то создать пустой файл с этим именем и вывести True. Евгений1240 Помощь студентам 0 24.04.2012 14:26
Сохранить текстовый файл в указанную папку с заданным именем (Delphi) winwirus Помощь студентам 3 26.09.2011 20:14
Excel (VBA) создать папку vik85 Помощь студентам 1 31.01.2010 13:17
Создать ярлык => выбор файла => Открыть файл как папку??? Alex Cones Windows 6 05.10.2009 10:47