วิธีรับเส้นทางของแผ่นงานปัจจุบันใน VBA ได้อย่างไร


141

ฉันเขียนมาโครเป็นส่วนเสริมและฉันต้องได้รับเส้นทางของเวิร์กชีทปัจจุบันที่มันถูกเรียกใช้งาน ฉันจะทำสิ่งนี้ได้อย่างไร ฉันจะรับพา ธ ไฟล์ได้อย่างไร (เฉพาะไดเรกทอรี)


คุณหมายถึงว่าในแผ่นงานคุณต้องการทราบโฟลเดอร์ที่บันทึกสมุดงานหลักหรือไม่
งัด

คำตอบ:


264

ใช้Application.ActiveWorkbook.Pathสำหรับเส้นทางเท่านั้นเอง (โดยไม่มีชื่อสมุดงาน) หรือApplication.ActiveWorkbook.FullNameสำหรับเส้นทางที่มีชื่อสมุดงาน


24
Activeworkbook ขึ้นอยู่กับสมุดงานที่ใช้งานอยู่ ใช้ Thisworkbook.path
Alwyn Miranda

6
ทั้งสองมีประโยชน์ในสถานการณ์ที่แตกต่างกันแน่นอน ฉันใช้คำถามเดิมเพื่อหมายความว่าแมโครอยู่ในสมุดงานเพิ่ม (ซึ่งจะเป็น ThisWorkbook.path) แต่จำเป็นต้องเรียกใช้รหัสกับสมุดงานอื่นตามที่ผู้ใช้ต้องการ (ซึ่งจะเป็น ActiveWorkbook.path)
BradC

2
ควรชัดเจนเสมอ - ถ้าเป็นเวิร์กบุคนี้ควรเป็น application.thisworkbook.path ถ้าเป็นสมุดงานที่กำลังเปิดอยู่ชื่อควรถูกกำหนดด้วยชุดแล้ว application.Variablename.path (หรือ fullpath ขึ้นอยู่กับ)
Selkie

@Selkie หากรหัสตัวเองเปิดสมุดงานแล้วแน่นอน แต่ถ้านี่เป็นเพียงแมโครตัวช่วยที่อยู่ในสมุดงานเพิ่มและต้องการทำงานกับสมุดงานใดก็ตามที่ผู้ใช้เปิดอยู่ในขณะนั้นเมื่อเรียกใช้แมโครActiveWorkbookนั่นคือสิ่งที่จำเป็น
BradC

3
Excel.ActiveWorkbook.Pathใช้งานได้หากไฟล์ได้รับการบันทึกอย่างน้อยหนึ่งครั้ง นอกจากนี้หากไฟล์ไม่เคยถูกบันทึกไว้Excel.ActiveWorkbook.FullNameจะส่งกลับเฉพาะชื่อไฟล์ อาจเป็นความคิดที่ดีที่จะตรวจสอบถ้าสมุดงานเคยได้รับการบันทึกไว้
ChrisB

37

มีความสุขเสมอที่จะมี:

Dim myPath As String     
Dim folderPath As String 

folderPath = Application.ActiveWorkbook.Path    
myPath = Application.ActiveWorkbook.FullName

27

หากคุณต้องการที่จะได้รับเส้นทางของสมุดงานจากที่แมโครจะถูกดำเนินการ - Application.ThisWorkbook.Pathการใช้งาน
Application.ActiveWorkbook.Pathบางครั้งสามารถให้ผลลัพธ์ที่ไม่คาดคิด (เช่นถ้าแมโครของคุณสลับระหว่างสมุดงานหลายเล่ม)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.