Bagaimana cara mendapatkan jalur lembar kerja saat ini di VBA?

141

Saya menulis makro sebagai add-in, dan saya perlu mendapatkan jalur lembar kerja saat ini yang sedang dieksekusi. Bagaimana saya melakukan ini? Bagaimana cara mendapatkan path file (hanya direktori)?

l --''''''---------------- '' '' '' '' '' '' '
sumber
maksud Anda, dengan diberikan lembar kerja, Anda ingin tahu folder tempat buku kerja induk disimpan?
Mathias

Jawaban:

264

Gunakan Application.ActiveWorkbook.Pathhanya untuk jalur itu sendiri (tanpa nama buku kerja) atau Application.ActiveWorkbook.FullNameuntuk jalur dengan nama buku kerja.

BradC
sumber
24
Activeworkbook tergantung pada buku kerja mana yang aktif. GUNAKAN Thisworkbook.path
Alwyn Miranda
6
Keduanya berguna dalam situasi yang berbeda, tentu saja. Saya mengambil pertanyaan awal yang berarti bahwa makro berada di buku kerja tambahan (yang akan menjadi ThisWorkbook.path), tetapi perlu menjalankan kode terhadap buku kerja lain sesuai kebutuhan oleh pengguna (yang akan menjadi ActiveWorkbook.path).
BradC
2
Harus selalu eksplisit - jika ini workbook ini, itu harus application.thisworkbook.path. Jika itu adalah buku kerja yang sedang dibuka, nama harus didefinisikan dengan satu set, kemudian application.Variablename.path (atau fullpath, tergantung).
Selkie
@ Selie Jika kode itu sendiri membuka buku kerja, maka yakin. Tetapi jika ini hanyalah makro pembantu yang berada di buku kerja tambahan dan perlu beroperasi di buku kerja mana pun yang saat ini dibuka pengguna saat mereka memanggil makro, maka ActiveWorkbookitulah yang diperlukan.
BradC
3
Excel.ActiveWorkbook.Pathhanya berfungsi jika file telah disimpan setidaknya sekali. Juga, jika file tidak pernah disimpan, Excel.ActiveWorkbook.FullNamehanya mengembalikan nama file. Mungkin ide yang baik untuk memeriksa apakah buku kerja pernah disimpan .
ChrisB
37

Selalu menyenangkan untuk dimiliki:

Dim myPath As String     
Dim folderPath As String 

folderPath = Application.ActiveWorkbook.Path    
myPath = Application.ActiveWorkbook.FullName
Alex22
sumber
27

Jika Anda ingin mendapatkan lintasan buku kerja dari tempat makro dieksekusi - gunakan Application.ThisWorkbook.Path.
Application.ActiveWorkbook.PathKadang-kadang dapat menghasilkan hasil yang tidak terduga (misalnya jika makro Anda beralih di antara banyak buku kerja).

longsoran1
sumber
-1

Cara tercepat

path = ThisWorkbook.Path
Pablo Vilas
sumber