2016-10-08 3 views
0

나는 다른 사람들에게 배포 할 통합 문서 작업을하고 있으며 코드의 상당 부분은 공유 동기화 폴더에 저장된 통합 문서에서 가져 오는 것에 의존합니다. "TEETH"라고 부르 자고합니다. "C:\Users\TEETH"을하지만 일부 다른 사람을 위해, 내가이 개 솔루션 1. Excel에서 상대적으로 C:\ 디렉토리를 통해 볼 수있는 방법을 생각하고 "C:\Users\desktop\TEETH" 또는 "C:\Users\My Documents\TEETH"Excel VBA를 사용하여 특정 폴더 찾기

을 설치되어 : 나를 위해

는 이빨이 경로에 설치 빨리 폴더를 찾은 다음 셀에 경로를 출력하십시오. 2. 사용자가 폴더를 찾은 다음 셀 경로를 덤프하십시오.

위의 두 가지 방법이 가능합니까? 아니면 더 좋은 방법이 있습니까?

감사합니다.

+0

"설치"라고 말하면 다른 소프트웨어 패키지의 일부로 사용 하시겠습니까? 그렇다면 레지스트리 항목이 필요합니다. – Comintern

답변

1

전체 드라이브 검색에 꽤 많은 시간이 소요됩니다. getFileList를 만들어 배열의 파일 경로를 반환하는 모든 폴더와 하위 폴더를 반복적으로 검색합니다. 올바른 디렉토리를 찾으면 함수를 종료시켜 프로세스 속도를 높일 수 있습니다.

나는 SaveSetting을 사용하여 레지스트리의 경로를 저장하고 나중에 GetAllSettings

HowTo_GetFileList 매크로를 사용하여 가져 오는 중 오류 좋습니다 파일 경로의 배열을 필터링 할 수있는 방법을 보여줍니다.

enter image description here

Sub HowTo_GetFileList() 
    Const MATCHVALUE As String = "Demo" 
    Dim f, FileList, FilteredList 
    FileList = getFileList("C:\Users\Owner\Downloads") 
    FilteredList = Filter(FileList, MATCHVALUE) 

    For Each f In FilteredList 
     'Do Something 
    Next 

End Sub 

Function getFileList(localRoot As String, Optional fld, Optional ftpArray) 
    Dim fso, f, baseFolder, subFolder, ftpFile, i 

    Set fso = CreateObject("Scripting.Filesystemobject") 

    If IsMissing(fld) Then 
     Set baseFolder = fso.GetFolder(localRoot) 
    Else 
     Set baseFolder = fld 
    End If 

    For Each f In baseFolder.Files 

     If IsMissing(ftpArray) Then 
      ReDim ftpArray(0) 
     Else 
      i = UBound(ftpArray) + 1 
      ReDim Preserve ftpArray(i) 
     End If 
     ftpArray(i) = f.Path 

    Next 

    For Each subFolder In baseFolder.SubFolders 
     getFileList localRoot, subFolder, ftpArray 
    Next 

    getFileList = ftpArray 
End Function 

가장 효율적인 옵션은 공유 폴더의 목록을 반환하는 LDAP 쿼리를 확인하는 것입니다. VBSEditor.com의 Sample Script이 바로 그 작업을 수행합니다. 이를 위해서는 상당한 양의 Active Directory 지식이 필요합니다.

+0

안녕하세요. Thomas, 저를 도와 주셔서 감사합니다. 불행히도이 코드는 현재 지식 수준에 비해 너무 복잡하다고 생각합니다. 따라서 OP에서 두 번째 생각을 대신하게되었습니다. OP는 사용자가 폴더를 찾고 파일 경로를 덤프하도록합니다. 그러나 이상한 오류가 발생했습니다. 당신은 나를 도울 수 있습니까? 또 다른 질문입니다 : http://stackoverflow.com/questions/39934048/pick-folder-routine-going-to-error-handler-excel-vba – Daruki

0

이것은 더 복잡한 대답이 아닙니다. 폴더 선택 상자를 열고 선택한 경로가있는 문자열을 반환하는 함수입니다. 난 내 애플 리케이션의 대부분에 넣어 폴더를 선택할 때마다 코드를 실행하고 싶지 않아 시간이 많이 걸리지 않으며, 매우 안정적입니다.

Public Function FolderSelection() As String 
    Dim objFD As Object 
    Dim strOut As String 

    strOut = vbNullString 

    Set objFD = Application.FileDialog(4) 

    objFD.Title = 'the title you want to show 
    objFD.InitialFileName = 'standard path 

    If objFD.Show = -1 Then 
     strOut = objFD.SelectedItems(1) 
    End If 

    Set objFD = Nothing 
    FolderSelection = strOut 

End Function 
관련 문제