programing

vba를 사용하여 현재 작업 디렉토리를 얻는 방법은 무엇입니까?

projobs 2021. 1. 19. 21:10
반응형

vba를 사용하여 현재 작업 디렉토리를 얻는 방법은 무엇입니까?


MS Excel 2010을 사용하고 있으며 아래 코드를 사용하여 현재 디렉토리를 얻으려고합니다.

    path = ActiveWorkbook.Path

그러나 ActiveWorkbook.Path는 공백을 반환합니다.


나는 이것을 테스트했다 :

Excel 문서를 열 때 D:\db\tmp\test1.xlsm:

  • CurDir() 보고 C:\Users\[username]\Documents

  • ActiveWorkbook.Path 보고 D:\db\tmp

따라서 CurDir()시스템 기본값이 있으며 변경할 수 있습니다.

ActiveWorkbook.Path 동일한 저장된 통합 문서에 대해 변경되지 않습니다.

예를 들어, CurDir()"파일 / 다른 이름으로 저장"명령을 수행하고 파일 / 디렉토리 선택 대화 상자에서 임의의 디렉토리를 선택하면 변경됩니다. 그런 다음 취소를 클릭하여 저장을 건너 뜁니다. 그러나 CurDir()이미 마지막으로 선택한 디렉토리로 변경되었습니다.


찾고있는 항목에 따라 몇 가지 옵션이 있습니다. Workbook.Path저장된 통합 문서의 경로를 반환합니다. Application.PathExcel 실행 파일의 경로를 반환합니다. CurDir현재 작업 경로를 반환합니다. 이는 아마도 내 문서 폴더 또는 이와 유사한 것으로 기본 설정 될 것입니다.

Windows 스크립팅 셸 개체의 .CurrentDirectory 속성을 사용할 수도 있습니다.

Set wshell = CreateObject("WScript.Shell")
Debug.Print wshell.CurrentDirectory

그러나 그것은 단지 같은 결과를 얻을 것입니다

Debug.Print CurDir

ActiveWorkbook이 저장되지 않은 것 같습니다 ...

CurDir()대신 시도하십시오 .


코드 : path = ActiveWorkbook.Path

통합 문서를 아직 저장하지 않았기 때문에 공백을 반환합니다.

문제를 해결하려면 Excel 시트로 돌아가서 시트를 저장하고 코드를 다시 실행하십시오.

이번에는 공백으로 표시되지 않지만 위치 (현재 폴더)가있는 경로를 표시합니다.

도움이 되었기를 바랍니다.


Application.ActiveWorkbook.Path경로 자체 (통합 문서 이름 제외) 또는 통합 문서 이름이있는 경로에만 사용 합니다 Application.ActiveWorkbook.FullName.


탐색기에서 현재 경로여는 데 사용하는 VBA입니다 .

Shell Environ("windir") & "\explorer.exe """ & CurDir() & "",vbNormalFocus

Microsoft 문서 :


정말로 순수한 작업 디렉토리를 의미한다면 이것은 당신에게 적합합니다.

솔루션 A :

Dim ParentPath As String: ParentPath = "\"
Dim ThisWorkbookPath As String
Dim ThisWorkbookPathParts, Part As Variant
Dim Count, Parts As Long

ThisWorkbookPath = ThisWorkbook.Path
ThisWorkbookPathParts = Split(ThisWorkbookPath, _
                        Application.PathSeparator)

Parts = UBound(ThisWorkbookPathParts)
Count = 0
For Each Part In ThisWorkbookPathParts
    If Count > 0 Then
        ParentPath = ParentPath & Part & "\"
    End If
    Count = Count + 1
    If Count = Parts Then Exit For
Next

MsgBox "File-Drive = " & ThisWorkbookPathParts _
       (LBound(ThisWorkbookPathParts))
MsgBox "Parent-Path = " & ParentPath

하지만 그렇지 않다면 이것으로 충분합니다.

솔루션 B :

Dim ThisWorkbookPath As String

ThisWorkbookPath = ThisWorkbook.Path
MsgBox "Working-Directory = " & ThisWorkbookPath 

이 코드를 사용하고 즐기십시오.

Public Function GetDirectoryName(ByVal source As String) As String()
Dim fso, oFolder, oSubfolder, oFile, queue As Collection
Set fso = CreateObject("Scripting.FileSystemObject")
Set queue = New Collection

Dim source_file() As String
Dim i As Integer        

queue.Add fso.GetFolder(source) 'obviously replace

Do While queue.Count > 0
    Set oFolder = queue(1)
    queue.Remove 1 'dequeue
    '...insert any folder processing code here...
    For Each oSubfolder In oFolder.SubFolders
        queue.Add oSubfolder 'enqueue
    Next oSubfolder
    For Each oFile In oFolder.Files
        '...insert any file processing code here...
        'Debug.Print oFile
        i = i + 1
        ReDim Preserve source_file(i)
        source_file(i) = oFile
    Next oFile
Loop
GetDirectoryName = source_file
End Function

여기에서 함수를 호출 할 수 있습니다.

Sub test()
Dim s
For Each s In GetDirectoryName("C:\New folder")
Debug.Print s
Next
End Sub

참조 URL : https://stackoverflow.com/questions/19824164/how-to-get-current-working-directory-using-vba

반응형