#excel #vba
#excel #vba
Вопрос:
У меня более 1000 папок старше года, которые содержат различные файлы, такие как файлы Excel и .txt. Я хотел бы создать программу vba в Excel, которая могла бы перемещать эти папки в папку архива, но я не уверен, как написать это в Excel, поскольку у меня нет большого опыта в том, чтобы vba делал что-то за пределами Excel. Это то, что я нашел в Google, и это работает, но для этого требуется исходная папка, и мне просто нужно переместить папки внутри нее.
Private Sub CommandButton1_Click()
Dim objFileSystem As Object
Dim SourceFolder As String
Dim TargetFolder As String
'Path of the folder where files are locted
SourceFolder = "C:DesktopSource Folder"
TargetFolder = "C:DesktopTarget Folder"
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
'Check if source and target folder exists
If objFileSystem.FolderExists(SourceFolder) = True And objFileSystem.FolderExists(TargetFolder) = True Then
objFileSystem.MoveFolder Source:=SourceFolder, Destination:=TargetFolder
MsgBox "Source folder has moved to target folder"
Else
MsgBox "Either source or target folder does not exist"
End If
End Sub
Комментарии:
1. Google для перебора папок и копирования / перемещения вложенных папок
Ответ №1:
Переместить вложенные папки
Option Explicit
Private Sub CommandButton1_Click()
Const SourceFolder As String = "C:DesktopSource Folder"
Const TargetFolder As String = "C:DesktopTarget Folder"
Dim Sep As String
Sep = Application.PathSeparator
Dim fdate As Long ' Account for leap year:
fdate = Date - IIf(Day(Date) <> Day(Date - 365), 366, 365)
With CreateObject("Scripting.FileSystemObject")
If .FolderExists(SourceFolder) And .FolderExists(TargetFolder) Then
Dim fsoFolder As Object
Set fsoFolder = .GetFolder(SourceFolder)
Dim fsoSubFolder As Object
Dim n As Long
For Each fsoSubFolder In fsoFolder.Subfolders
If fsoSubFolder.DateCreated < fdate Then
n = n 1
.MoveFolder _
Source:=fsoSubFolder, _
Destination:=TargetFolder amp; Sep amp; fsoSubFolder.Name
End If
Next fsoSubFolder
MsgBox "Moved " amp; n amp; " folder(s) to target folder"
Else
MsgBox "Either source or target folder does not exist"
End If
End With
End Sub
Комментарии:
1. Спасибо, что это сработало! есть ли какой-нибудь материал, который я мог бы прочитать в Интернете, который мог бы помочь мне на самом деле понять этот код построчно?
2. Начните отсюда
File System Object
. Также изучите другие объекты, показанные слева от страницы. Когда устанете или заскучаете, откройте новую рабочую книгу. В VBE включитеTools>References>Microsoft Scripting Runtime
и в новом подразделе напишите :Dim fso As FileSystemObject
:Set fso = New FileSystemObject
и продолжайте,fso.
и intellisense VBA покажет вам различные возможности.3. Используя способ, описанный в комментарии, в решении, которое вы бы продолжили:
If fso.FolderExists(SourceFolder) And fsoFolderExists(TargetFolder) Then
;Dim fsoFolder As Folder
:Set fsoFolder = fso.GetFolder(SourceFolder)
:Dim fsoSubFolder As Folder
а позже измените только наfso.MoveFolder _
, и у вас будет более читаемая версия. Это вызываетсяearly binding
, в то время как в коде, который я используюlate binding
, что, среди прочего, означает, что нам не нужна ссылка на библиотеку. Конечно, вы не знакомы с этим, изучите «режим раннего связывания», чтобы ознакомиться с предметом.