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.Path
Excel 실행 파일의 경로를 반환합니다. 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
'programing' 카테고리의 다른 글
ASP.NET 4.5 MVC 4가 Windows Server 2008 IIS 7에서 작동하지 않음 (0) | 2021.01.19 |
---|---|
해시 배열에서 값 수집 (0) | 2021.01.19 |
개체 데이터 소스가있는 ng-options (0) | 2021.01.19 |
Amazon S3 및 Cloudfront 캐시, 캐시를 지우거나 캐시를 동기화하는 방법 (0) | 2021.01.19 |
보다 크거나 작은 CSS n 번째 하위 (0) | 2021.01.19 |