Проверьте папку и сравните для точного списка текстовых файлов.Также есть открытая переменная с folderpicker, которую я не могу отобразить внутри msgbox - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть кнопка activex, пытающаяся заставить ее проверить папку для определенного набора .txt файлов.Я хотел бы сравнить все имена файлов со списком имен файлов, чтобы увидеть, что не указано в папке.Также в этом модуле проверки файлов находится общедоступный переменный вызов для указания пути к папке (который пользователь выбрал с помощью folderpicker), но не заставил его работать.Эта же общедоступная переменная должна находиться в следующей строке в Msgbox, где указан путь к папке, который был выбран.Я могу разместить список файлов в любом месте рабочей книги.В настоящее время у меня работает модуль проверки файлов, который возвращает сообщение о том, существует файл или нет.

Я только что смог заставить свою публичную переменную работать.Это не то, чему я учусь, читая и учась задавать вопросы.Перемещая строки / слова вокруг, я смог заставить работать несколько вещей.Хотя я уверен, что это не самый эффективный способ.


'Working but only checks one file at a time. and hard coded
Sub CheckFolderForFiles()
'
' CheckFolderForFiles Macro
 '
'Check if file exist
If Dir$("C:\txtdata\cf_preferences.txt") = "" Then
MsgBox "C:\txtdata\cf_preferences.txt - File not found"
Exit Sub
End If

____________________________________

' Not working - Just testing public variable call for Dir$ and figure out MsgBox areas.

Sub CheckFolderForFiles()
'
' CheckFolderForFiles Macro
'

'Проверьте, существует ли файл If Dir $ (Module33.fle + "\ alerts.txt") = "" Тогда MsgBox &fle & "alerts.txt - Файл не найден" Exit Sub End If '' End Sub __________________________________

'Folder Picker FileDialog user select folder.  
'After some guidence by one our your users I was able to get this module work.
'Now have a public variable I wish to use throughtout the workbook to 
'call the path.


Public fle As String

Sub FolderPicker()

Dim diaFolder As FileDialog

Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
diaFolder.AllowMultiSelect = False
diaFolder.Show

fle = diaFolder.SelectedItems(1)
Range("M11") = fle

Set diaFolder = Nothing

End Sub
-------------------------------
 Sub CheckFolderForFiles()
 '
 ' CheckFolderForFiles Macro
 '
 'Check if file exist
 '
 '
 If Dir$(Module33.fle + "\alerts.txt") = "" Then 
      MsgBox Module33.fle + "\alerts.txt - File not found"

  End If
 '
 If Dir$(Module33.fle + "\cf_messages.txt") = "" Then
      MsgBox Module33.fle + "\cf_messages.txt - File not found"

 End If

 End Sub
 ----------------------------

Я пытаюсь узнать это, чтобы помочь с рабочим проектом моей жены.поэтому, пожалуйста, будьте терпеливы с моими описаниями и отсутствием терминологии.Но если бы кто-то мог направить меня к сценарию, который сравнивает файлы в папке, пришедшей из общедоступной переменной, и сообщает мне все файлы, отсутствующие в списке.(Всего 15 файлов) это поможет куче.Кроме того, кто-нибудь знает, как или если вы можете очистить общедоступную переменную от его сохраненных данных?Поиск в Google говорит просто положить (End) в модуль.не работает.

Заранее спасибо.Я ценю руководство.

1 Ответ

0 голосов
/ 12 февраля 2019

Попробуй это.Я использую ArrayList для фильтрации несуществующих файлов.Если вы хотите распечатать список несуществующих файлов, просто распечатайте оставшийся элемент массива FileList, вы можете использовать синтаксис Google.

Sub TestFileExist()
Dim fd As FileDialog
Dim mFiles As Variant, Item As Variant
Dim FileList As Object, mRange As Range, strFile As String
Dim FilesInFolder() As String
Dim i As Long

Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
    .Title = "Select a folder"
    .AllowMultiSelect = False
End With

If fd.Show = -1 Then
    Set FileList = CreateObject("System.Collections.ArrayList")
    Set mRange = Range("A1:A5") 'Range contains files' names

    ReDim FilesInFolder(0) As String
    strFile = Dir(fd.SelectedItems(1) & "\*.txt")
    Do While Len(strFile) > 0
        FilesInFolder(UBound(FilesInFolder)) = strFile
        strFile = Dir
        ReDim Preserve FilesInFolder(UBound(FilesInFolder) + 1) As String
    Loop

    For Each Item In mRange
        If Not FileList.contains(Item.Value) Then
            FileList.Add Item.Value
        End If
    Next Item

    For i = 0 To UBound(FilesInFolder) - 1
        If FileList.contains(FilesInFolder(i)) Then
            FileList.Remove FilesInFolder(i)
        End If
    Next i

    MsgBox FileList.Count 'Nbr of files not found
End If

End Sub
...