Как я могу удалить несколько пустых файлов .csv? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть некоторый код VBA в Excel 2010, который импортирует несколько файлов .csv в одну книгу Excel, однако, иногда есть мошеннический файл, который ничего не содержит и имеет размер файла ноль, который выдает ошибку, затем мне нужно вручную перейдите в папку и удалите это и снова запустите мой макрос. Поэтому мне нужна помощь, которая позволит мне проверить размер всех CSV-файлов, содержащихся в папке, и удалить все нулевые, прежде чем импортировать их. Есть ли способ, которым я могу сделать это? Или, возможно, другой предложенный метод, который поможет? Я очень плохо знаком с VBA, поэтому, пожалуйста, будьте терпеливы, если я не до конца понимаю.

Я посмотрел в FileLen (C: \ Test \ test.csv) = 0 Затем Kill сказал файл. Но это только удаляет конкретно упомянутый файл. Я бы предпочел проверить все размеры файлов и, если они есть, уничтожить их.

Ответы [ 3 ]

1 голос
/ 08 мая 2019

Вы можете использовать FileSystemObject, чтобы проверить файлы в папке и удалить их, если они имеют правильный тип и размер = 0.

Будьте очень осторожны при выполнении этого, поскольку удаления будут постоянными (не подлежат восстановлению).

Option Explicit
'Set reference to Microsoft Scripting Runtime
Sub terfuge()
    Dim FSO As FileSystemObject, FI As File, FIs As Files, FO As Folder
    Const strBasePath As String = "full_path_of_folder_to_search"
    Dim bMsg As Integer

Set FSO = New FileSystemObject
Set FO = FSO.GetFolder(strBasePath)
Set FIs = FO.Files

For Each FI In FIs
    If FI.Name Like "*.csv" Then
        If FI.Size = 0 Then
            bMsg = MsgBox(Prompt:="Are you sure you want to delete " & FI.Name & "?", Buttons:=vbYesNoCancel)
            Select Case bMsg
                Case vbYes
                    FI.Delete
                Case vbCancel
                    Exit Sub
            End Select
        End If
    End If
Next FI

End Sub
0 голосов
/ 08 мая 2019

Спасибо вам обоим за ваши быстрые ответы, мне удалось в конечном итоге запустить цикл, покачивая образец Энди. Я уже начал увлекаться его идеей, прежде чем Рон ответил, поэтому продолжил. Мне, однако, нравится идея, что сначала пользователя спрашивают, хотят ли они удалить файл, поэтому я думаю, что я тоже попробую предложение Рона и, возможно, узнаю что-нибудь по пути. Еще раз спасибо.

0 голосов
/ 08 мая 2019

Вы можете использовать команду DIR для поиска по всем файлам в папке, а затем уничтожить любой файл размером 0. Приведенный ниже код просматривает указанную папку и перечисляет имена файлов * .xls на листе с именем Main. Это должно быть легко адаптировать и комбинировать с вашей собственной командой Kill.

Sub Directory()
    Dim strPath As String
    Dim strFolderPath As String
    Dim strFileName As String
    Dim intRow As Integer
    Dim intColumn As Integer
    Dim intNumber As Integer

    intRow = 1
    intColumn = 1
    intNumber = 0

    strFolderPath = "h:\excel\*.xls" 'search through H drive excel folder
    strFileName = Dir(strFolderPath) 'Get name of first file
    Do
        Sheets("Main").Cells(intRow, intColumn) = strFileName 'write filename
        strFileName = Dir  'get next filename
        intRow = intRow + 1
    Loop Until strFileName = ""

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...