Страницы: 1
RSS
Вырезать-вставить папку
 
Доброго времени суток!  
 
Кто нибудь знает, как вырезать папку из одного места и вставить ее в другое с помощью макросов в excel?
 
Около месяца назад видел в инете как можно скопировать и удалить папку без FSO, а с ними еще легче это сделать (главное чтобы нужная библиотека была), поищите.
<FONT COLOR="CadetBlue">
 
С дружественного сайта:  
Вариант I.    
iSource = "C:\Мои документы\Продажи"    
iDestination = "C:\Архив\Продажи_2006"    
 
On Error GoTo ErrHandler    
 
With CreateObject("Scripting.FileSystemObject")    
    If .FolderExists(iSource) = True And _    
       .FolderExists(iDestination) = False Then    
       .MoveFolder iSource, iDestination    
    Else    
       MsgBox "Перемещение невозможно", , ""    
    End If    
End With    
 
ErrHandler:    
If Err.Number <> 0 Then    
  MsgBox Err.Description, vbCritical, ""    
End If  
= = =    
Вариант II.    
iSource = "C:\Мои документы\Продажи"    
iDestination = "C:\Архив\Продажи_2006"    
 
On Error GoTo ErrHandler    
 
With CreateObject("Scripting.FileSystemObject")    
    If .FolderExists(iSource) = True And _    
       .FolderExists(iDestination) = False Then    
       .GetFolder(iSource).Move iDestination    
    Else    
       MsgBox "Перемещение невозможно", , ""    
    End If    
End With    
 
ErrHandler:    
If Err.Number <> 0 Then    
  MsgBox Err.Description, vbCritical, ""    
End If
 
Спасибо :)
 
Название перемещаемой папки - текущая дата - например 21.01.2011. Папки, куда планируется перемещать данную папку называются по месяцам - Январь, Февраль, Март и т.д. Возможно ли, чтобы папка с 01 месяцем в названии перемещалась именно в Январь, с указанием 02 месяца - в Февраль и т.д.?
 
Возможно.
 
Если подскажете как, буду вам очень признателен :)
 
Это я из вредности:    
- спросили "как вырезать папку" - получили ответ КАК.  
- спросили "Возможно ли" - получили соответствующий ответ :-)  
Приучаю к порядку.  
Покажу чуть позже - занят пока другим макросом.
 
Вредные вы какие :) Боюсь не справлюсь... Если бы я сам мог все это прописать, я бы вопрос и не задавал :) Морочиться то я, конечно морочусь над решением. Но "воз, пока, и ныне там..." За направление спасибо, но сам прописать пока не могу.
 
Тема еще актуальна. Если есть возможность помочь, помогите пожалуйста, а? :)
 
Да у меня дочка родилась месяц назад, так что я все больше сплю, чем занимаюсь самопознанием :) Огромное спасибо :)
 
Спасибо :) А как быть с остальной частью кода - сравнение в указанной папке имен подпапок и перенос папки с текущей датой с рабочего стола в подпапку с указанием месяца? :)
 
Еще раз огромное спасибо!!! Все работает! :)
 
Поторопился я - ничего не работает почему то... :(    
 
Sub Test()  
Dim iSource As String, iDestination As String  
Dim sMonth As String  
sMonth = Format(Date, "MMMM")  
 
iSource = "C:\Documents and Settings\All Users\Рабочий стол\" & Date  
iDestination = "V:\US\Info\Заявки\2011\" & sMonth  
 
On Error GoTo ErrHandler  
 
With CreateObject("Scripting.FileSystemObject")  
If .FolderExists(iSource) = True And _  
.FolderExists(iDestination) = False Then  
.GetFolder(iSource).Move iDestination  
Else  
MsgBox "Перемещение невозможно", , ""  
End If  
End With  
 
ErrHandler:  
If Err.Number <> 0 Then  
MsgBox Err.Description, vbCritical, ""  
End If  
End Sub  
 
Пробовал и iSource = "C:\Documents and Settings\All Users\Рабочий стол\" & Sheets("Мониторинг").Range("A1").Value, и папку переименовывал в английское название месяца. Ни в какую :(
 
В ячейке Sheets("Мониторинг").Range("A1").Value как раз и формируется дата.    
 
По этому тесту пишет: "Папки C:\Documents and Settings\All Users\Рабочий стол\17.03.2011 не существует" -    
 
Sub Test1()  
iSource = "C:\Documents and Settings\All Users\Рабочий стол\" & Date  
If Dir(iSource, vbDirectiory) = "" Then  
MsgBox "Папки " & iSource & " не существует"  
End If  
End Sub  
 
А по этому: "Папки V:\US\Info\Заявки\2011\Март не существует" -    
 
Sub Test2()  
Dim iSource As String, iDestination As String  
Dim sMonth As String  
sMonth = Format(Date, "MMMM")  
iSource = "V:\US\Info\Заявки\2011\" & sMonth  
If Dir(iSource, vbDirectiory) = "" Then  
MsgBox "Папки " & iSource & " не существует"  
End If  
End Sub  
 
Путь и имена папок указаны правильно. Папки созданы. Почему VB их не находит непонятно. Дата выглядит как дата.
 
А дальше выдает, что перемещение невозможно.
 
Причем этот макрос папку видит и сохраняет в нее файлы:  
 
Sub SaveAs()  
ActiveWorkbook.Save  
Dim x As String  
strPath = "C:\Documents and Settings\All Users\Рабочий стол\" & Workbooks("Мониторинг.xls").Sheets("Мониторинг").Range("A1").Value  
On Error Resume Next  
x = GetAttr(strPath) And 0  
If Err = 0 Then ' если путь существует - сохраняем копию книги  
strDate = Format(Now, "dd/mm/yy hh-mm")  
FileNameXls = strPath & "\" & Left(ActiveWorkbook.Name, _  
Len(ActiveWorkbook.Name) - 4) & " " & strDate & ".xls"  
ActiveWorkbook.SaveAs Filename:=FileNameXls  
Else 'если путь не существует - создаем папку и сохраняем в нее файл  
pathDir = "C:\Documents and Settings\All Users\Рабочий стол\" & Workbooks("Мониторинг.xls").Sheets("Мониторинг").Range("A1").Value  
If Dir(pathDir, vbDirectory) = "" Then  
MkDir pathDir  
strDate = Format(Now, "dd/mm/yy hh-mm")  
FileNameXls = strPath & "\" & Left(ActiveWorkbook.Name, _  
Len(ActiveWorkbook.Name) - 4) & " " & strDate & ".xls"  
ActiveWorkbook.SaveAs Filename:=FileNameXls  
End If  
End If  
ActiveWorkbook.Close SaveChanges:=False  
End Sub
 
Пробовал. Не видит он эти папки. А в конечных местах они есть!
 
Может быть, "Desktop" вместо "Рабочий стол"?
 
В том то и дело, что папка уже создана и второй макрос сохраняет в нее файл. А первый макрос ее не видит. А имя конечной папки я копировал, открыв саму конечную папку. То есть есть они обе существуют, а макрос их не видит.  
 
Desktop тоже пробовал - не работает.
 
Вместо равно поставил знаки меньше и больше:    
Sub Test1()  
iSource = "C:\Documents and Settings\All Users\Рабочий стол\" & Date  
If Dir(iSource, vbDirectiory) <> "" Then  
MsgBox "Папки " & iSource & " не существует"  
End If  
End Sub  
Сообщение о том, что папки не существует, пропало. Но перемещение все равно невозможно.
 
Sub Test3()  
iPath = "C:\Documents and Settings\All Users\Рабочий стол\" & Workbooks("Мониторинг.xls").Sheets("Мониторинг").Range("A1").Value  
 
With CreateObject("Scripting.FileSystemObject")  
    If .FolderExists(iPath) = True Then  
       MsgBox "Папка : " & iPath & " найдена", , ""  
    Else  
       MsgBox "Папка : " & iPath & " не найдена", , ""  
    End If  
End With  
End Sub  
 
Выдает, что папка найдена.  
 
А вот здесь  
 
Sub Test4()  
iPath = "V:\US\Info\Заявки\2011\" & sMonth  
 
With CreateObject("Scripting.FileSystemObject")  
    If .FolderExists(iPath) = True Then  
       MsgBox "Папка : " & iPath & " найдена", , ""  
    Else  
       MsgBox "Папка : " & iPath & " не найдена", , ""  
    End If  
End With  
End Sub  
 
пишет, что папка найдена, но без марта.
 
То есть по первому он выдает весь путь, включая папку с сегодняшней датой, которая мне нужна. А по второму говорит, что папка "V:\US\Info\Заявки\2011\" найдена. "\Март" не подставляется.
 
Sub Test11()  
Dim sMonth As String  
sMonth = Format(Date, "MMMM")  
iPath = "V:\US\Info\Заявки\2011\" & sMonth  
 
With CreateObject("Scripting.FileSystemObject")  
    If .FolderExists(iPath) = True Then  
       MsgBox "Папка : " & iPath & " найдена", , ""  
    Else  
       MsgBox "Папка : " & iPath & " не найдена", , ""  
    End If  
End With  
End Sub  
 
Точно. Так здесь работает - папка найдена. А перемещать не хочет почему то.
 
А не может быть проблемы в формате месяца? Вы поставили в коде "ММММ", а в папке у меня и январь, и февраль... 6 и 7 знаков, соответственно... м?
 
Тогда непонятно - почему не перемещает. Пойду точки расставлять, может что-то получится...
 
А вот таким образом VB копирует файлы из папки с датой на рабочем столе и вставляет их в папку Март. Плохо только то, что без самой папки.    
 
Sub Test()  
Dim iSource As String, iDestination As String  
Dim sMonth As String  
sMonth = Format(Date, "MMMM")  
 
iSource = "C:\Documents and Settings\All Users\Рабочий стол\" & Workbooks("Остатки в банкоматах.xls").Sheets("Мониторинг").Range("A1").Value  
iDestination = "V:\Инкассация\Info\Заявки\2011\" & sMonth  
 
On Error GoTo ErrHandler  
 
With CreateObject("Scripting.FileSystemObject")  
If .FolderExists(iSource) = True Then  
.CopyFolder iSource, iDestination ', True  
Else  
MsgBox "Копирование невозможно, ввиду отсутствия папки", , ""  
End If  
End With  
 
ErrHandler:  
If Err.Number <> 0 Then  
MsgBox Err.Description, vbCritical, ""  
End If  
End Sub
 
Sub Test()  
Dim iSource As String, iDestination As String  
Dim sMonth As String  
sMonth = Format(Date, "MMMM")  
 
iSource = "C:\Documents and Settings\All Users\Рабочий стол\" & Workbooks("Остатки в банкоматах.xls").Sheets("Мониторинг").Range("A1").Value  
iDestination = "V:\Инкассация\Info\Заявки\2011\" & sMonth & "\" & Workbooks("Остатки в банкоматах.xls").Sheets("Мониторинг").Range("A1").Value  
 
On Error GoTo ErrHandler  
 
With CreateObject("Scripting.FileSystemObject")  
If .FolderExists(iSource) = True Then  
.CopyFolder iSource, iDestination ', True  
Else  
MsgBox "Копирование невозможно, ввиду отсутствия папки", , ""  
End If  
End With  
 
ErrHandler:  
If Err.Number <> 0 Then  
MsgBox Err.Description, vbCritical, ""  
End If  
End Sub  
 
А так копирует как надо. Осталось еще убить исходную папку и все будет тип-топ. Спасибо :)
 
Если кому нужно, то исходная папка убивается еще одним кодом:  
 
Sub KillFolder()  
Dim Fname, PathName, FullName As String  
PathName = "C:\Documents and Settings\All Users\Рабочий стол\" & Workbooks("Остатки в банкоматах.xls").Sheets("Мониторинг").Range("A1").Value  
'KillFolder = True  
Fname = Dir(PathName & "\*.*", 55)  
If (Fname <> "") And (Fname <> ".") And (Fname <> "..") Then  
FullName = PathName & "\" & Fname  
SetAttr FullName, vbNormal  
Kill FullName  
End If  
Do While Fname <> ""  
Fname = Dir()  
If (Fname <> "") And (Fname <> ".") And (Fname <> "..") Then  
FullName = PathName & "\" & Fname  
SetAttr FullName, vbNormal  
Kill FullName  
End If  
Loop  
ChDir ("..")  
RmDir (PathName)  
'GoTo Finish  
'ReZ: KillFolder = False  
'Finish:  
End Sub
Страницы: 1
Читают тему
Наверх