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)?
excelvbal --''''''---------------- '' '' '' '' '' '' ' 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.
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 .
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).
Jawaban:
Gunakan
Application.ActiveWorkbook.Path
hanya untuk jalur itu sendiri (tanpa nama buku kerja) atauApplication.ActiveWorkbook.FullName
untuk jalur dengan nama buku kerja.sumber
ActiveWorkbook
itulah yang diperlukan.Excel.ActiveWorkbook.Path
hanya berfungsi jika file telah disimpan setidaknya sekali. Juga, jika file tidak pernah disimpan,Excel.ActiveWorkbook.FullName
hanya mengembalikan nama file. Mungkin ide yang baik untuk memeriksa apakah buku kerja pernah disimpan .Selalu menyenangkan untuk dimiliki:
sumber
Jika Anda ingin mendapatkan lintasan buku kerja dari tempat makro dieksekusi - gunakan
Application.ThisWorkbook.Path
.Application.ActiveWorkbook.Path
Kadang-kadang dapat menghasilkan hasil yang tidak terduga (misalnya jika makro Anda beralih di antara banyak buku kerja).sumber
Cara tercepat
sumber