VBA를 사용하여 폴더의 파일을 통해 반복

Bilal Shahid 2023년6월21일
  1. VBA를 사용하여 폴더의 파일을 통해 반복
  2. Dir 기능 사용
  3. 파일 시스템 개체 사용
  4. 더 나은 솔루션
  5. 결론
VBA를 사용하여 폴더의 파일을 통해 반복

Visual Basic for Applications는 Microsoft Office용으로 설계된 이벤트 기반 프로그래밍 언어입니다. 요구 사항에 따라 작업을 자동화하고 기능을 사용자 정의할 수 있습니다.

VBA는 매우 강력하며 사용자가 몇 개의 코드 문으로 모든 작업을 수행할 수 있습니다.

이 문서에서는 VBA를 사용하여 폴더에 저장된 파일을 반복하는 방법에 대해 설명합니다. 두 가지 방법이 아래에서 자세히 설명되었으며 코드 스니펫이 제공되었습니다.

VBA를 사용하여 폴더의 파일을 통해 반복

VBA를 사용하면 사용자가 특정 디렉토리에 저장된 파일을 반복하고 이름, 타임스탬프, 확장자 등을 얻을 수 있습니다. 예를 들어 새 파일을 만들거나 이전 파일을 변경하는 등 디렉토리에 액세스하여 모든 작업을 수행할 수 있습니다.

이 기사에서는 액세스 시간이 각각 다른 두 가지 솔루션을 언급했습니다. VBA를 사용하면 Dir 기능을 사용하고 파일 시스템 개체를 생성하여 폴더의 파일을 반복할 수 있습니다.

다른 솔루션은 아래에서 설명합니다.

Dir 기능 사용

다음 코드 조각은 사용자가 Dir 기능을 사용하여 폴더의 파일을 반복할 수 있도록 합니다. Dir 기능은 디렉토리 기능으로 알려져 있습니다.

파일 경로를 매개 변수로 사용하고 파일 이름을 반환하는 내장 VBA 함수입니다.

경로가 폴더를 나타내는 경우 Dir 함수는 경로에 저장된 첫 번째 파일 이름을 반환합니다. 다음 코드 스니펫은 Dir 함수가 폴더의 파일을 반복하는 데 어떻게 도움이 되는지 나타냅니다.

Sub example()
    Dim fileName As Variant
    fileName = Dir("C:\User\testfolder\")

    Do While Len(fileName) > 0

        ' Insert any action that must be performed on each file.

        Debug.Print fileName
        ' Prints file name to the immediate window

        fileName = Dir
        ' Set the file name to the next file name

    Loop

End Sub

참고: 이것은 코드 스니펫이며 전체 코드가 아닙니다. 요구 사항에 따라 편집할 수 있습니다.

Dir 기능은 빠르고 효율적인 솔루션을 제공합니다. 또한 액세스 시간도 빠릅니다.

폴더의 특정 파일만 반복하려면 Dir 기능으로 test 조건을 적용할 수 있습니다. Dir 기능과 함께 test 조건을 사용하는 구문은 다음과 같습니다.

Dir("C:\User\testfolder\*test*")

*test*는 파일에 적용하려는 모든 조건이 될 수 있습니다. 예를 들어:

  1. 폴더의 텍스트 파일만 반복하려면 Dir("C:\User\testfolder\*.txt") 명령을 사용합니다.
  2. 이름에 "Finance"가 포함된 파일만 반복하려면 Dir("C:\User\testfolder\*Finance*") 명령을 사용합니다.

참고: Dir 함수의 인수는 숨김, 시스템 등과 같은 다른 유형의 파일을 반환하도록 변경할 수도 있습니다.

파일 시스템 개체 사용

두 번째 솔루션은 파일 시스템 개체(FSO)를 생성하여 폴더에 저장된 파일을 반복합니다. FSO의 다양한 기능을 사용하여 폴더에 저장된 파일을 순환합니다.

코드 스니펫이 아래에 공유됩니다.

Sub example()
   Dim Obj As Object, Source As Object, file As Variant
   Set Obj = CreateObject("Scripting.FileSystemObject")
   Set Source = Obj.GetFolder("C:\User\testfolder\")

   For Each file In Source.Files

      If InStr(file.Name, ".txt") > 0 Then
	      Debug.Print file.Name
      End If

   Next file
End Sub

코드 스니펫은 특정 폴더의 경로로 소스를 설정합니다. 그런 다음 For Each 루프를 사용하여 폴더의 모든 파일을 반복합니다.

폴더의 모든 파일을 반복하지 않으려면 InStr(file.name, "test") > 0 명령을 사용하고 텍스트를 지정하여 파일을 필터링할 수 있습니다. 조건이 true를 반환하면 해당 특정 파일에서 수행해야 하는 작업이 if 문 내에 언급됩니다.

그러나 위에서 언급한 코드 스니펫에는 한 가지 문제가 있습니다.

코드의 함수 file.name의 실행 시간이 느립니다. 사용자에게 답변을 반환하는 데 몇 초가 걸립니다.

테스트를 사용하여 특정 파일을 필터링하지 않는 경우 file.name 기능이 필요하지 않습니다. 이 경우 이상적으로 작동합니다.

언급된 코드 스니펫을 통해 폴더의 모든 파일을 쉽고 빠르게 반복할 수 있습니다.

FSO 조기 바인딩 대 후기 바인딩

파일 시스템 개체는 초기 바인딩과 후기 바인딩의 두 가지 방법으로 선언할 수 있습니다.

  1. 초기 바인딩

    초기 바인딩은 참조 링크(라이브러리)가 VBA에서 명시적으로 확인되거나 추가되는 경우입니다. 라이브러리는 VBA의 도구 > 참조에서 추가할 수 있습니다.

    컴퓨터에서 모듈을 사용할 수 없으면 실행이 실패합니다. 초기 바인딩은 개발 및 디버깅 프로세스에 매우 유용합니다.

    개체 메서드, 속성 및 명명된 상수에 대한 Intellisense 편집기 제안을 제공합니다. 또한 후기 바인딩보다 빠릅니다.

    초기 바인딩에서 필요한 모듈/라이브러리를 확인하고 다음과 같은 방식으로 개체를 선언합니다.

    Dim FSO As FileSystemObject
    Set FSO = New FileSystemObject
    

    초기 바인딩에서 개체를 선언하는 또 다른 방법은 다음과 같습니다.

    Dim FSO As New FileSystemObject
    
  2. 늦은 바인딩

    후기 바인딩에서는 외부 라이브러리가 연결되지 않습니다. 참조 링크와 독립적이므로 시스템 간 이식성 및 호환성에 이상적입니다.

    Intellisense-editor를 제공하지 않으므로 개체별 상수는 해당 값으로 명시적으로 선언되고 제공되어야 합니다.

    후기 바인딩에서 개체를 선언하는 데 다음 구문을 사용할 수 있습니다.

    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    

더 나은 솔루션

폴더에서 파일을 가져오기 위해 개체를 생성하는 솔루션보다 Dir 기능이 있는 솔루션이 더 잘 작동합니다. Dir 기능을 사용한 테스트 기능은 파일에 액세스하기 위해 개체를 생성하는 솔루션보다 효율적으로 작동합니다.

필요한 기능을 저장하고 실행하는 매크로를 만들 수 있습니다. Microsoft Office의 매크로를 사용하여 다른 폴더에서 동일한 기능을 실행할 수 있습니다.

결론

Microsoft Office 응용 프로그램은 사용자를 위해 다양한 기능을 제공합니다. VBA 언어로 프로그래밍이 추가되면서 사용자는 몇 줄의 코드만으로 자동화된 작업을 더 쉽게 수행할 수 있게 되었습니다.

특정 폴더의 파일을 순환하는 여러 솔루션이 있으므로 계속 탐색하십시오.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

관련 문장 - VBA File