Я пытаюсь создать фрагмент сценария, который позволит мне скопировать 100 файлов из одной папки и создать новую папку на основе первого файла и последнего имени файла, а затем переместить эти 100 файлов в эту папку.
После перемещения этих файлов я хочу, чтобы они отображали папки в списке пользователя в виде элементов, которые можно нажимать.
Например, каждый элемент в списке будет папкой, если я дважды щелкну по имени папки, он отобразит все содержимое файла (каждого из 100 файлов) на листе, который я настроил.
Я еще не смог протестировать этот код, все, что я делал на прошлой неделе, это исследовал и переписывал код снова и снова, пока я не смог его правильно понять, прежде чем добавить его в программу. Так что на этом пути обязательно будет несколько или более ошибок.
Что я заметил, так это фрагмент кода "objFile.CopyFile Folderpath & FCount &" _ "& LCount", в котором не указано, какие файлы могут быть специально скопированы. Например, я хочу, чтобы он начинался с первого файла и начинал копировать первые 100 файлов; когда код будет выполнен снова, он начнется с файла 101 и скопирует следующие 100 файлов. Если есть способ гарантировать, что он не продолжит копировать первые 100 файлов, это было бы здорово!
Sub Main()
'====CHECK IF THERE'S 100 FILES====
Dim filename, folderpath, path As String
Dim count As Integer
Dim FCount, LCount, FlagCount, IntCount As Integer
Dim objFSO As Object
Dim obj As Object
FCount = 0 ' First File name
LCount = 0 'Last file name
count = 0 'file count
FlagCount = Sheets("Flag Sheet").Range("A2").Value
folderpath = "Work\Big Book\" '==================Location Of The Book
path = folderpath & "*.xls"
filename = Dir(path)
Do While filename <> ""
count = count + 1
filename = Dir(path)
Loop
If count < 100 Then
'====CREATE A FOLDER FOR THE FILES====
If FlagCount <> "" Then '====If there is a flag count, it will create a folder based on the last number it was used
FCount = FlagCount + 1
LCount = FlagCount + 101
MkDir folderpath & FCount & "_" & LCount
Else '=======================else if there isnt one, it will use the first file name to create the folder
FCount = IntCount + 1
LCount = IntCount + 100
MkDir folderpath & FCount & "_" & LCount
End If
'====MOVE 100 FILES TO FOLDER====
For Each objFile In objFSO.GetFolder(path)
If FlagCount <> "" Then '====================if theres a flag count it will move the files starting after the flag count + 101
objFile.CopyFile folderpath & FCount & "_" & LCount
IntCount = FlagCount + 1
If IntCount = FlagCount + 100 Then Exit For
Else '======================================else it will just move the first 100 files
objFile.CopyFile folderpath & FCount & "_" & LCount
IntCount = IntCount + 1
If IntCount = IntCount + 100 Then Exit For
End If
Next
End If
Else
'===Do Nothing===
End If
End Sub
'=====Display Folders In Listbox=====
'====Display Folder Items In Book====
'Call the function
DisplayFoldersInListBox folderpath & FCount & "_" & LCount, Me.Listbox1
Sub Button_Click()
For Each File in Folderpath & FCount & "_" & LCount & "\" & Listbox.value
'[INSERT BIG BOOK CODE]
Next
End Sub
Private Sub DisplayFoldersInListBox(ByVal strRootFolder As String, ByRef lbxDisplay As MSForms.ListBox)
Dim fso As Object
Dim fsoRoot As Object
Dim fsoFolder As Object
'Make sure that root folder contains trailing backslash
If Right$(strRootFolder, 1) <> "\" Then strRootFolder = strRootFolder & "\"
'Get reference to the FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
'Get the root folder
Set fsoRoot = fso.GetFolder(strRootFolder)
'Clear the listbox
lbxDisplay.Clear
'Populate the listbox with subfolders of Root
For Each fsoFolder In fsoRoot.SubFolders
lbxDisplay.AddItem fsoFolder.Name
Next fsoFolder
'Clean up
Set fsoRoot = Nothing
Set fso = Nothing
End Sub
Эта ссылка: Копировать только первый файл из папки VBA
Кажется, это ответ для копирования файлов, но я не совсем уверен, как добавить его в мой скрипт. Кто-нибудь может мне помочь?