image

FileSystemObject는 시스템에 연결된 폴더 및 파일 작업에 사용됩니다. 이를 사용하여 파일, 폴더, 드라이브 및 텍스트 스트림에 액세스 할 수 있습니다. 파일, 폴더 및 텍스트 파일에 액세스 할 수있을뿐만 아니라 생성도 가능합니다. 이러한 작업은 시스템의 하드 디스크에 국한되지 않고 파일에 연결된 모든 장치에 국한됩니다. 즉, 펜 드라이브, CD ROM 또는 가상으로 연결된 네트워크 드라이브에 액세스 할 수 있습니다.

VBA에서 FileSystemObject를 사용하여 수행 할 수있는 작업은 다음과 같습니다.

텍스트 파일을 만들고, 열고, 읽고, 쓰고, 삭제합니다.

폴더를 추가, 변경 및 삭제합니다.

파일과 폴더를 반복합니다.

파일 또는 폴더를 다른 위치로 복사 및 이동합니다.

파일 또는 폴더가 위치에 있는지 확인하기 위해

VBA에서 FileSystemObject에 액세스하는 방법?

파일 시스템 개체는 Microsoft Scripting Runtime Library의 일부입니다.

FileSystemObject에 액세스하려면 Microsoft Scripting Runtime Library 또는 Scrrun.dll *에 대한 참조를 연결하거나 추가해야합니다.

참고 : Scrrun.dll은 TextStream 개체를 사용한 파일 생성 및 조작을 지원하므로 FileSystemObject는 이진 파일의 작업을 지원하지 않습니다.

VBA에서 FileSystemObject를 만드는 방법에는 두 가지가 있습니다.

1 : CreateObject 메서드를 사용하여 FSO 개체 만들기 :

이 방법을 사용하여 먼저 가변 객체 유형을 선언합니다. 그런 다음 CreateObject를 사용하여 FSO 개체의 참조를 해당 변수로 설정합니다.

Sub LearnFso()

'Creating the object variable

Dim fso As Object

'Create the FileSystemObject using Create Object Method

Set fso = CreateObject("Scripting.FileSystemObject")

Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR")

End Sub

이 방법은 동적이며 양도 가능합니다. 이는 코드를 다른 시스템과 공유하는 경우이 코드가 완벽하게 작동 함을 의미합니다. 사용중인 Microsoft Runtime Scripting 버전의 버전은 중요하지 않습니다.

유일한 단점은 VBA에서 제공하는 인텔리 센스를 볼 수 없다는 것입니다. FileSystemObject의 모든 속성과 메서드를 사용하려면 지식에 의존해야합니다.

2 : Microsoft 런타임 스크립팅에 대한 참조를 추가하여 FSO 개체 만들기 새 키워드를 사용하여 VBA에서 FileSystemObject를 직접 만들 수 있습니다.

이를 위해 시스템의 최신 Microsoft Scripting Runtime에 대한 참조를 추가해야합니다.

참조를 추가하려면 도구 메뉴에서 참조 옵션으로 이동하십시오.

여기에서 Microsoft Scripting Runtime dll을 찾습니다. 확인하고 확인을 클릭하십시오.

image

이제 FSO 개체를 만들고 사용할 준비가되었습니다.

Sub LearnFso()

Dim fso as new FileSystemObject

Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR")

End Sub

또는

Sub LearnFso()

Dim fso as FileSystemObject

Set fso = New FileSystemObject

Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR")

End Sub

둘 다 잘 작동합니다.

이 방법의 가장 큰 장점은 VBA의 지능을 볼 수 있다는 것입니다. VBA는 fso 개체의 모든 속성과 메서드를 보여줍니다. 또한 어떤 종류의 변수를 받아들이고 어떤 종류의 값을 반환할지 알려줍니다.

image

이 코드를 다른 시스템과 공유하는 경우 도구에서 Scripting Runtime에 대한 참조를 추가하도록 지시해야합니다. 그렇지 않으면 사용자 정의 유형이 정의되지 않았다는 컴파일 오류가 발생합니다. 따라서 다른 프로그래밍 언어를 가져 오는 것과 같습니다.

FSO는 키워드가 아닙니다. 변수 이름으로 사용할 수 있습니다. filesystemobject 이름을 fso로 지정하는 것은 단지 관례입니다. 그래서 어떤 사람들은 그것을 키워드로 혼동합니다. FSO 개체를 만드는 두 가지 방법 모두 설명하면서 언급 한 장단점이 있습니다. 따라서 필요에 따라 사용하십시오. 이 기사에서는 FileSystemObject를 만드는 두 번째 방법을 사용합니다.

이제 VBA에서 FileSystemObject를 만드는 방법을 알았으므로이 지식을 사용하여 의미있는 작업을 수행해 보겠습니다. 예를 들어 보겠습니다.

예제 1 : 지정된 폴더에서 모든 하위 폴더 가져 오기 우리가 볼 첫 번째 예제는 특정 폴더에서 하위 폴더 이름을 가져 오는 것입니다.

Sub LearnFso()

' decaring variables that we will need

Dim fso As FileSystemObject ' Variable for the FileSystemObject

Dim fdr As Folder      ' Variable for the base folder

Dim subfdr As Folder     ' Variable for the sub folders

Dim fdrpath As String 'to store path of base folder

'Intializing the objects

fdrpath = "D:\Downloads" 'Declaring the folder

Set fso = New FileSystemObject 'Creating the fso object

Set fdr = fso.GetFolder(fdrpath) 'Creating the folder object of given folder

'loop to get all the sub folders name in

For Each subfdr In fdr.SubFolders

Debug.Print subfdr.Name

Next subfdr

End Sub

위의 코드를 실행하면 얻을 수 있습니다.

image

네! 그게 내 다운로드 폴더입니다. 그것에 집중하지 마십시오.

어떻게 작동합니까?

단계별로 이해해 봅시다 :

1 : 필요한 변수 제거

Dim fso As FileSystemObject ‘Variable for the FileSystemObject Dim fdr As Folder’Variable for the base folder Dim subfdr As Folder ‘Variable for the sub folders 먼저이 예제에서 필요한 모든 변수를 선언했습니다.

첫 번째 변수는 물론 파일 시스템 객체로서의 fso입니다. 두 변수 fdr 및 subfdr은 폴더 유형입니다. 직접 생성하는 대신 fso 객체를 사용하여 파일 유형 객체를 생성합니다. fdrpath *는 모든 하위 폴더를 가져 오려는 기본 폴더의 경로를 유지하는 데 사용되는 use 변수입니다.

2 : 개체 초기화

fdrpath = “D : \ Downloads” ‘폴더 선언 _Set fso = New FileSystemObject’fso 객체 생성 _ _Set fdr = fso.GetFolder (fdrpath) ‘지정된 폴더의 폴더 객체 생성 _이 단계에서는 모든 객체를 초기화했습니다. 우리는 subfdr을 제외하고 선언했습니다. fso 객체의 메소드 getFolder를 사용하여 fdr 파일 변수를 초기화했습니다.

FileSystemObject의 GetFolder () 메서드는 폴더 또는 디렉터리의 경로를 문자열로 사용하고 파일 형식 개체를 반환합니다.

3 : 폴더 개체의 모든 하위 폴더 이름을 가져 오는 루프

For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next subfdr 여기서는 for each 루프를 사용하여 fdr 파일 개체의 각 하위 폴더를 반복했습니다. 반복 할 파일 객체의 SubFolders 속성을 사용했습니다.

name 속성을 사용하여 각 하위 폴더의 이름을 가져옵니다. 그리고 끝났습니다.

예제 2 : 폴더 및 하위 폴더의 모든 파일 경로 가져 오기 폴더 및 하위 폴더에있는 모든 파일의 모든 경로 또는 정규화 된 이름을 가져 오려면 예제 1 코드에 몇 줄을 더 추가해야합니다.

Sub LearnFso()

Dim fso As FileSystemObject

Dim fdr As Folder  ' Variable for the base folder

Dim subfdr As Folder ' Variable for the sub folders

Dim fdrpath As String 'to store path of base folder

Dim fl As File    'to store file object

fdrpath = "D:\downloads"

Set fso = New FileSystemObject

Set fdr = fso.GetFolder(fdrpath)

'loop to get all the sub folders name in

For Each subfdr In fdr.SubFolders

For Each fl In subfdr.Files 'to loop throgh each file

Debug.Print fl.Path 'getting file name

Next fl

Next subfdr

'to get the files of main folder

For Each fl In fdr.Files

Debug.Print fl.Path

Next fl

End Sub

Folder.Files () 메서드는 하위 폴더의 파일을 반환하는 메서드입니다. File.Path () 메서드는 파일의 전체 주소를 반환합니다. 우리는 각각 메인 폴더와 그 하위 폴더의 모든 파일을 반복하는 내부 루프가 있습니다. 기본 폴더의 파일을 가져 오기 위해 다른 루프를 사용합니다.

예 3 : CSV 파일에 파일 이름을 저장합니다.

이전 예에서는 직접 실행 창에서 특정 폴더의 파일 경로를 인쇄하는 방법을 배웠습니다. 이 예에서는 이러한 경로를 CSV 파일에 저장하는 방법을 배웁니다. 그렇게하려면 코드에 몇 줄만 추가하면됩니다. 아래 굵은 코드 줄을 참조하십시오.

Sub LearnFso()

Dim fso As FileSystemObject

Dim fdr As Folder  ' Variable for the base folder

Dim subfdr As Folder ' Variable for the sub folders

Dim fdrpath As String 'to store path of base folder

Dim fl As File    'to store file object

Dim fileList As TextStream 'A textstream object

fdrpath = "D:\downloads"

Set fso = New FileSystemObject

Set fdr = fso.GetFolder(fdrpath)

Set fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False)

'loop to get all the sub folders name in

For Each subfdr In fdr.SubFolders

For Each fl In subfdr.Files 'to loop through each file

fileList.Write fl.Path & ","

Next fl

Next subfdr

'to get the files of main folder

For Each fl In fdr.Files

fileList.Write fl.Path & ","

Next fl

fileList.Close

End Sub

여기서 우리는

라는 FileStream 유형의 새 객체를 선언했습니다. === fileList

아래 줄을 사용하여 filestream 개체로 filelist 변수를 초기화했습니다.

Set fileList = fso.CreateTextFile (fdrpath & “\ File List in This Folder.csv”, True, False) FSO의 CreateTextFile 메서드를 사용하여 FileStream 개체를 만듭니다.

텍스트 파일을 생성합니다. 이 메서드는 전체 경로가있는 파일 이름을 받아들입니다. 첫 번째 변수는 그렇게합니다. .csv 확장자를 사용하여 csv 파일을 만듭니다. 두 번째 변수는 덮어 쓰기를 허용하는 데 사용됩니다.

세 번째 인수는 이진 파일이 아님을 선언하는 False입니다. 루프에서 debug.print를 filelist.Write 메서드로 대체하여 생성 된 파일에 각 파일 경로를 기록합니다. 네, 이것이 FileSystemObject를 사용하는 방법입니다. FSO는 다음 기사에서 논의 할 더 많은 작업에 사용할 수 있습니다. 이 FSO 관련 쿼리 문서에 대해 의문이있는 경우 아래 의견 섹션에서 저에게 질문하십시오.

관련 기사 :

link : / applications-word-outlook-in-vba-getting-started-with-excel-vba-userforms [Getting Started With Excel VBA UserForms]| * Excel에서 양식을 만드는 방법, 사용 방법을 설명합니다. VBA 도구 상자, 사용자 입력 처리 방법 및 마지막으로 사용자 입력 저장 방법. 하나의 예제와 단계별 가이드를 사용하여 이러한 주제를 살펴 보겠습니다.

link : / general-topics-in-vba-vba-variables-in-excel [Excel의 VBA 변수]| * VBA는 Visual Basic for Applications를 나타냅니다.

Microsoft의 프로그래밍 언어입니다. MSExcel, MS-Word 및 MS-Access와 같은 Microsoft Office 응용 프로그램에서 사용되는 반면 VBA 변수는 특정 키워드입니다.

link : / general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope]| * 모든 프로그래밍 언어에는 정의 된 변수에 액세스 할 수있는 위치를 정의하는 변수 액세스 지정자가 있습니다. Excel VBA도 예외는 아닙니다. VBA에도 범위 지정자가 있습니다.

link : / cells-ranges-rows-and-columns-in-vba-byref-and-byval-arguments-vba-interview-question [ByRef 및 ByVal 인수]| 인수가 ByRef 인수로 다른 하위 또는 함수에 전달되면 실제 변수의 참조가 전송됩니다. 변수 복사본에 대한 변경 사항은 원래 인수에 반영됩니다.

link : / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [Microsoft Excel에서 VBA를 사용하여 확인 메시지없이 시트 삭제]| VBA를 사용하여 시트를 삭제하므로 수행중인 작업을 알고 있습니다.

이 경고를 표시하지 않고 망할 시트를 삭제하도록 Excel에 지시하고 싶습니다.

link : / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel 2016에서 VBA를 사용하여 새 통합 문서 추가 및 저장]| 이 코드에서는 먼저 통합 문서 개체에 대한 참조를 만들었습니다. 그런 다음 새 통합 문서 개체로 초기화했습니다. 이 접근 방식의 이점은이 새 통합 문서에서 작업을 쉽게 수행 할 수 있다는 것입니다. 저장, 닫기, 삭제 등`link : / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [메시지 표시 켜기 Excel VBA 상태 표시 줄 *]`| Excel의 상태 표시 줄은 코드 모니터로 사용할 수 있습니다. VBA 코드가 길고 VBA를 사용하여 여러 작업을 수행하는 경우 화면 깜박임이 표시되지 않도록 화면 업데이트를 비활성화하는 경우가 많습니다.

link : / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel 2016에서 VBA를 사용하여 경고 메시지 끄기]| *이 코드는 VBA를 비활성화 할뿐만 아니라 경고뿐만 아니라 코드의 시간 효율성도 증가시킵니다. 방법을 살펴 보겠습니다.

인기 기사 :

link : / keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [50 Excel 단축키로 생산성 향상]| 작업 속도를 높이십시오. 이 50 개의 바로 가기를 사용하면 Excel에서 더 빠르게 작업 할 수 있습니다.

link : / formulas-and-functions-introduction-of-vlookup-function [Excel의 VLOOKUP 함수]| 이것은 다른 범위와 시트에서 값을 조회하는 데 사용되는 Excel의 가장 많이 사용되고 인기있는 기능 중 하나입니다. link : / tips-countif-in-microsoft-excel [Excel 2016의 COUNTIF]| 이 놀라운 기능을 사용하여 조건으로 값을 계산합니다. 특정 값을 계산하기 위해 데이터를 필터링 할 필요가 없습니다.

Countif 기능은 대시 보드를 준비하는 데 필수적입니다.

link : / excel-formula-and-function-excel-sumif-function [Excel에서 SUMIF 함수 사용 방법]| 이것은 또 다른 대시 보드 필수 기능입니다. 이를 통해 특정 조건에 대한 값을 합산 할 수 있습니다.