Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
19.04.2024, 13:13:47

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Сортировка файлов по папкам в EXCEL по имени ячейки
Страниц: [1]   Вниз
Печать
Автор Тема: Сортировка файлов по папкам в EXCEL по имени ячейки  (Прочитано 6476 раз)
0 Пользователей и 1 Гость смотрят эту тему.
дамир
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля E-mail
« : 02.12.2018, 10:10:41 »

Добрый день! Помогите пожалуйста автоматизировать сортировку файлов по папкам. Есть много файлов в папке с названиями this_file_001, this_file_002, this_file_003 и т.д. они прописаны в таблице. И перед каждым таким файлом в таблице записано название папки, в которую этот файл должен попасть. Возможно есть макрос?
Записан
boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #1 : 02.12.2018, 11:07:36 »

Добрый день,
макроса нет, но есть команда в VBA FileCopy
Вот основываясь на данной команде и напишите себе макрос
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

дамир
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля E-mail
« Ответ #2 : 02.12.2018, 11:33:51 »

Мне нужно сделать чтобы он проверял ячейки, допустим, Если есть папка с названием ячейки А1 и есть файл с названием ячейки D1 то переместить файл D1 в папку A1. Для меня программирование тяжело даётся.

Нашёл скрипт, попробовал переделать его под свою задачу, но он выдаёт ошибку.

Код: (vb)

Sub Move_File()
    Dim sFileName As String, sNewFileName As String
 
    sFileName = "C:\новая папка\this_file_001"    'имя исходного файла
    sNewFileName = "D:\новая папка\02\"    'имя файла для перемещения. Директория(в данном случае диск D) должна существовать
    If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка": Exit Sub
 
    Name sFileName As sNewFileName 'перемещаем файл
    MsgBox "Файл перемещен", vbInformation, "www.excel-vba.ru"
End Sub



Помогите пожалуйста переделать его
« Последнее редактирование: 02.12.2018, 11:42:49 от дамир » Записан
boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #3 : 02.12.2018, 11:55:28 »

Код: (vb)
Sub Move_File()
    Dim sFileName As String, sNewFileName As String
    Dim iRow&: iRow = 1
 Do While Cells(iRow, 4) <> ""
    sFileName = Cells(iRow, 4)    'имя исходного файла
    If Dir(sFileName, 16) <> "" Then
       sNewFileName = Cells(iRow, 1) & "\" & Dir(sFileName, vbNormal + vbHidden + vbSystem)    'имя файла для перемещения. Директория должна существовать
  
       Name sFileName As sNewFileName 'перемещаем файл
    end if
 Loop
    MsgBox "Файл перемещен", vbInformation, "www.excel-vba.ru"
End Sub
« Последнее редактирование: 02.12.2018, 12:01:27 от boa » Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

дамир
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля E-mail
« Ответ #4 : 02.12.2018, 12:30:51 »

Это всё хорошо, но я не понял как это применить, запускаю макрос, и всё зависает. И в самом скрипте я не увидел куда вписать сам путь до папки, в которой эти все файлы находятся.
Записан
boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #5 : 02.12.2018, 14:33:00 »

я не понял как это применить
да я и сам не знаю В замешательстве
Вы ж приложили файл, как того требуют правила форума, но я не умею гадать по фотографиям Плачущий
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

дамир
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля E-mail
« Ответ #6 : 02.12.2018, 18:20:30 »

Я просто скопировал этот скрипт, нажал Alt+F11 и вставил в новый макрос. Но когда запускаю скрипт всё зависает.
Записан
boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #7 : 02.12.2018, 19:35:39 »

Я понял, шутка не прошла,
Приложите файл в формате xls согласно правил форума.
А то ваше "вставил", ни о чем не говорит...
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

дамир
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля E-mail
« Ответ #8 : 02.12.2018, 19:46:35 »

Так-же как на картинке у меня просто текст записан в ячейках, прикрепил файл
Записан
vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #9 : 02.12.2018, 19:51:54 »

дамир, помогающему нужно копировть макрос, вставить в файл... Это нужно кому - Вам или помогающему? Вы этого не могли сделать? Вы сами должны приложить максимум усилий для прибжения помощи!
Цитировать
Я просто скопировал... вставил... Но когда запускаю скрипт всё зависает.
Ну, так показать же ошибку надо, наверное? А Вы - то картинки показываете, то файлы без макроса... И при этом ждете адекватной помощи.
Записан
дамир
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля E-mail
« Ответ #10 : 02.12.2018, 20:02:45 »

Вот файл с макросом, он не сохранился в файле.
Записан
boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #11 : 02.12.2018, 21:22:50 »

теперь понятнее.
у вас папки 01, 02 и т.п. расположены на планете Земля? или у них все же есть конкретный путь на диске типа "c:\Documents\01"
так вот в колонке A должны быть полные пути к будущему расположению, а в колонке D к текущему файлу
напрмер: А - "c:\Documents\01",  а D - "c:\Documents\this_file_001.xls"
и все будет работать
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #12 : 02.12.2018, 21:42:31 »

ну или тогда уже так
Код: (vb)
Sub Move_File()
    Dim sFileName As String, sNewFileName As String
    Dim iRow&: iRow = 1
 
 On Error Resume Next
 Do While Cells(iRow, 4) <> ""
    sFileName = Cells(iRow, 4) & ".xls"    'имя исходного файла
    If Dir(ThisWorkbook.Path & "\" & sFileName, 16) <> "" Then
'       sNewFileName = Cells(iRow, 1) & "\" & Dir(sFileName, vbNormal + vbHidden + vbSystem)    'имя файла для перемещения. Директория должна существовать
       sNewFileName = ThisWorkbook.Path & "\" & Cells(iRow, 1) & "\" & sFileName    'имя файла для перемещения. Директория должна существовать
       If Dir(ThisWorkbook.Path & "\" & Cells(iRow, 1), vbDirectory) = "" Then MkDir (ThisWorkbook.Path & "\" & Cells(iRow, 1)) ' создаем отсутствующую папку
       Name ThisWorkbook.Path & "\" & sFileName As sNewFileName 'перемещаем файл
    End If
    iRow = iRow + 1
    DoEvents    ' что бы прервать при зависании
 Loop
    MsgBox "Файлы перемещены", vbInformation, "www.excel-vba.ru"
End Sub

сорри, забыл в первом макросе счетчик поставить iRow = iRow + 1
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #13 : 02.12.2018, 21:59:16 »

Код: (vb)
Sub CopyFiles()
Dim aData()
'Dim fso As Object
Dim sPath As String, Folder As String, sFName As String
Dim i As Long
Const sPachFiles As String = "C:\TestFiles\"
Const sNewPach As String = "C:\TempFolder\"
    aData = Worksheets("Лист1").Range("A1:D9").Value
'    Set fso = CreateObject("scripting.FileSystemObject")
    
    With Application: .ScreenUpdating = False: .DisplayAlerts = False: End With
    If Dir(sNewPach, vbDirectory) = "" Then MkDir sNewPach ' создаем, если нет

    For i = 1 To UBound(aData)
        sFName = sPachFiles & aData(i, 4) & ".xlsx"

        If Dir(sFName, 16) <> "" Then ' если файл есть
            sFolder = sNewPach & aData(i, 1) & "\"
            If Dir(sFolder, vbDirectory) = "" Then MkDir sFolder

'            fso.CopyFile sFName, sFolder & aData(i, 4) & ".xlsx", False
            Name sFName As sFolder & aData(i, 4) & ".xlsx"
        End If
    Next i
    
'    Set fso = Nothing
    With Application: .ScreenUpdating = True: .DisplayAlerts = True: End With
    MsgBox "OK", 64, ""
End Sub

Если не перемещать файлы, а копировать:
раскомметировать строки с fso и закомментировать строку перемещения
Код: (vb)
Name sFName As sFolder & aData(i, 4) & ".xlsx"
« Последнее редактирование: 02.12.2018, 22:25:22 от vikttur » Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru