Excel Vba избежать повторного извлечения данных - PullRequest
0 голосов
/ 17 января 2020

У меня есть папка, которая содержит, например, файлы ab c, poi, krf, lss, и у меня есть кнопка, которая содержит существующий код, который перебирает папку и извлекает данные из каждого файла в таблицу Excel.

Однако, несмотря на то, что данные уже извлечены в таблицу Excel, каждый раз, когда я нажимаю кнопку, она все равно будет извлекать данные из каждого файла, я хотел бы избежать этого, сохраняя все имена файлов в папке в массиве. или другие методы, ТОГДА всякий раз, когда я нажимаю кнопку, он сравнивает «предыдущие имена файлов» внутри папки, если в папку вносятся какие-либо изменения, например, добавление в папку нового файла mmn, он будет выполнять только извлечение из файла ». mmn "и пропустите извлечение для остальных файлов, которые все еще были в папке.

например, моя папка в настоящее время содержит 50 файлов (все с разными именами), например," ab c "," mmn ", «lll», я сохраняю эти 50 имен файлов, а затем, если я нажму на свою кнопку, чтобы извлечь данные, она проверит, не произошло ли с ней в моей папке каких-либо изменений, например, если она все еще содержит 50 файлов (то же имя, что и у предыдущего ») ab c "," mmm "," lll "), то не делайте извлечения, потому что данные уже существуют в листе Excel.

однако, если файлы в папке изменились, например, был добавлен новый файл с именем «uio», то я хочу выполнить извлечение только на «uio» и добавить данные ниже последней строки, содержащей данные вместо всех файлов "ab c", "mmn", "lll" и "uio".

Это мой текущий код, может кто-нибудь, пожалуйста, дайте мне знать, как я могу изменить его в соответствии с моим описание?

Спасибо всем.

Option Explicit

Sub LoopFiles()

Dim strFolder As String
Dim strDirRef As String
Dim nFiles As Long, i As Long
Dim strFound() As String

strFolder = "C:\Users\Desktop\asi\"

strDirRef = Dir(strFolder)
Do While Len(strDirRef) > 0
    nFiles = nFiles + 1

    ReDim Preserve strFound(1 To nFiles)
    strFound(nFiles) = strDirRef
    strDirRef = Dir
Loop

For i = 1 To nFiles
    Debug.Print strFound(i)
Next i

End Sub

1 Ответ

0 голосов
/ 17 января 2020

Настоящим небольшой фрагмент о том, как я буду хранить их в Dictionary объекте с использованием метода Exists.

Public Dict As Object

Sub Test()

Dim oFSO As Object, oFolder As Object

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder("C:\Users\Desktop\asi")
If Dict Is Nothing Then
    Set Dict = CreateObject("Scripting.Dictionary")
End If

For Each oFile In oFolder.Files
    If Dict.Exists(oFSO.GetBaseName(oFile)) Then
        'Skip file
    Else
        'Don't skip file and do something....
        'Add to dictionary for next iteration
        Dict.Add oFSO.GetBaseName(oFile), 1
    End If
Next oFile

Range("A1").Resize(UBound(Dict.Keys)).Value = Application.Transpose(Dict.Keys)

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