2009-12-13 78 views
19

Nói, tôi đang viết một VBA bên trong tệp excel của mình sample.xls. Bây giờ tôi muốn nhận được đầy đủ đường dẫn của sample.xls trong VBA của tôi. Tôi phải làm nó như thế nào?Cách lấy tên/đường dẫn tệp excel trong VBA

+1

Khi bạn nói VBScript * bên trong * sample.xls, bạn có nghĩa là VBA, có nguồn gốc từ Excel không? – Fionnuala

+0

@Remou có, đó là VBA. – Veera

+1

Bạn có muốn sửa lại tiêu đề và thẻ không? – Oorang

Trả lời

23

Nếu bạn có ý nghĩa VBA, sau đó bạn có thể sử dụng FullName, ví dụ:

strFileFullName = ActiveWorkbook.FullName 
+11

Chắc chắn bạn có nghĩa là ThisWorkbook.FullName? ;) – Oorang

+4

Không nhất thiết. – Fionnuala

+13

Nhận xét của Oorang là đúng: 'ThisWorkbook.FullName' sẽ là cuộc gọi chính xác và an toàn. Câu hỏi của Veera nói rằng: "Tôi đang viết một VBA * bên trong * các tệp mẫu excel của tôi. Bây giờ tôi muốn lấy đường dẫn đầy đủ của sample.xls trong VBA của tôi". (Nhấn mạnh thêm vào.) Trong trường hợp này, việc sử dụng 'ThisWorkbook.FullName' được đảm bảo là đúng, trong khi 'ActiveWorkbook.FullName' có thể đưa ra một câu trả lời sai lầm nếu "sample.xls" hiện không phải là sổ làm việc hoạt động. –

7
strScriptFullname = WScript.ScriptFullName 
    strScriptPath = Left(strScriptFullname, InStrRev(strScriptFullname,"\")) 
+3

Các op nói * bên trong * sample.xls, mà làm cho tôi nghi ngờ của VBScript. Tôi nghi ngờ VBA. – Fionnuala

0

ActiveWorkbook.FullName sẽ là tốt hơn tôi nghĩ, trong trường hợp bạn có VBA Macro được lưu trữ trong một Workbook Excel, nhưng bạn muốn lấy các chi tiết của Excel mà bạn đang chỉnh sửa, không phải nơi Macro cư trú.

Nếu chúng cư trú trong cùng một tệp, thì nó không quan trọng, nhưng nếu chúng nằm trong các tệp khác nhau và bạn muốn tệp nơi Dữ liệu thay vì Macro, thì ActiveWorkbook là tệp cần tìm , bởi vì nó đề cập đến cả hai kịch bản.

2

đây là một lựa chọn đơn giản cung cấp tất cả các câu trả lời, Tên đầy đủ, Đường dẫn, tên tệp.

Dim FilePath, FileOnly, PathOnly As String 

FilePath = ThisWorkbook.FullName 
FileOnly = ThisWorkbook.Name 
PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly)) 
+0

Insted of 'PathOnly = Left (FilePath, Len (FilePath) - Len (FileOnly))' bạn có thể viết: 'PathOnly = ThisWorkbook.Path' – EBH

Các vấn đề liên quan