이 기사에서는 폴더 선택을 위해 폴더를 검색하는 데 사용되는 대화 상자를 표시하는 데 사용되는 절차를 만들었습니다.

이 코드는 런타임에 폴더를 선택해야하는 다른 매크로와 함께 사용할 수 있습니다.

SelectingFolder

논리 설명

이 기사에서는 폴더 탐색 대화 상자를 표시하는 두 가지 API 함수를 참조했습니다.

폴더 브라우저를 사용하여 특정 폴더를 선택하면 대화 상자에서 선택한 폴더의 경로를 반환합니다.

아래 코드를 따르세요

Option Explicit

'Declaring user data type

'Used by the function GetFolderName

Private Type BROWSEINFO

hOwner As Long

pidlRoot As Long

pszDisplayName As String

lpszTitle As String

ulFlags As Long

lpfn As Long

lParam As Long

iImage As Long

End Type

'Declaring reference to API Function

Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _

Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long

Private Declare Function SHBrowseForFolder Lib "shell32.dll" _

Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Function GetFolderName(Msg As String) As String

'Returns the name of the folder selected by the user

Dim bInfo As BROWSEINFO, path As String, r As Long

Dim X As Long, pos As Integer



bInfo.pidlRoot = 0

'Type of directory to return

bInfo.ulFlags = &H1

'Display the dialog

X = SHBrowseForFolder(bInfo)

'Parse the result

path = Space$(512)

'Calling API function

r = SHGetPathFromIDList(ByVal X, ByVal path)

'Code for deleting extra spaces in the end of folder name return

If r Then

pos = InStr(path, Chr(0))

GetFolderName = Left(path, pos - 1)

Else

GetFolderName = ""

End If

End Function

Sub TestGetFolderName()

Dim FolderName As String

'Calling function GetFolderName

FolderName = GetFolderName("Select a folder")

If FolderName = "" Then

MsgBox "You didn't select a folder."

Else

MsgBox "You selected this folder: " & FolderName

End If

End Sub

이 블로그가 마음에 들면 Facebook 및 Facebook에서 친구들과 공유하십시오.

여러분의 의견을 듣고 싶습니다. 작업을 개선하고 더 나은 서비스를 제공 할 수있는 방법을 알려주십시오. [email protected]로 문의 해주세요