Trang 1 trên 1

Path của Application

Đã gửi: T.Bảy 14/03/2009 9:02 am
gửi bởi truongphu
Tên bài viết: Path của Application
Tác giả: truongphu
Cấp độ bài viết: căn bản
Tóm tắt: Code để tìm Path và những lưu ý



Đường dẫn của file thực hành (EXE) đang chạy là một ứng dụng khá thông dụng. Nó cho phép ta truy xuất đến các file liên quan mà không cần biết chúng nằm cụ thể ở đâu trên một máy tính bất kỳ; chúng ta quen gọi ứng dụng nầy là "đường dẫn tương đối"
Khi file thực hành chạy, chúng tự nhận biết đường dẫn của chính mình. Nhờ đó ta có thể liên lạc với các file cùng folder với file thực hành, hoặc trong các folder con dưới nó.

A- VB6
Quá quen thuộc, đó là App.Path
Để bảo đảm không lỗi khi run, ta viết:

Mã: Chọn hết

  1. Dim Path$
  2. If Right(App.Path, 1) = "\" Then Path = App.Path Else Path = App.Path & "\"


B- VBA
Với lệnh

Mã: Chọn hết

  1. MsgBox Application.Path

thì tất cả ứng dụng VBA (Word, Excel, Access... ) đều thông báo đường dẫn cài đặt Office, tại folder nơi có chứa các Exe thi hành (WinWord.exe, MSACCESS.exe ...)

B1- Word:

Mã: Chọn hết

  1. MsgBox ThisDocument.Path

- Nếu câu lệnh của UserForm1 thuộc Project\ <Tên file Word> thì kết quả là đường dẫn của đúng vị trí file Word đang làm việc. Các câu lệnh trong UserForm1 chỉ dùng được trong tập tin Word nầy.
- Nếu câu lệnh của UserForm1 thuộc Normal\ <Tên file Word> thì kết quả là đường dẫn của file Normal.doc
(...\Application\ Data\ Microsoft\ Templates). Chọn trường hợp nầy để áp dụng code VBA chung cho tất cả các file Word.

B2- Excel:
Ta dùng lệnh:

Mã: Chọn hết

  1. MsgBox ThisWorkbook.Path


B3- Access
Ta dùng lệnh:

Mã: Chọn hết

  1. MsgBox CurrentProject.Path


C- VBS
VBS có sẵn 2 properties là WScript.ScriptFullName và WScript.ScriptlName để thông báo đường dẫn tên ứng dụng và tên ứng dụng
Chỉ để lấy Path, ta phải viết code riêng. Ví dụ ta viết:

Mã: Chọn hết

  1. Dim Path
  2. Path = Replace(WScript.ScriptFullName, WScript.ScriptName, "")


D- Cần phân biệt "Đường dẫn hiện hành trên các ổ đĩa cứng".
Với Windows, HĐH sẽ lưu các đường dẫn đang làm việc trên các ổ đĩa. (Xem VBLib, Chương Hàm VB, Mục Tập tin và Thư mục)
* Khi File thi hành (exe) khởi chạy, đường dẫn đang làm việc chính là App.Path trong VB6. Tuy nhiên nếu ta chuyển qua truy cập các thư mục khác, ví dụ dùng Explorer mở file, hay dùng CommonDialog mở file ở các thư mục khác thì đường dẫn đang làm việc không còn là App.Path nữa, mà chính là đường dẫn các file khác mới truy xuất. Do đó việc dùng dấu "." của thư mục hiện hành cần lưu ý
--> Ta có thể dùng code như sau khi ứng dụng bắt đầu làm việc, ví dụ ở Form_Load:
dùng dấu "." thay cho App.Path như sau:

Mã: Chọn hết

  1. "...data source= .\Kho\Quanly.mdb"

Kể từ sau Form_Load, dấu "." thay cho App.Path không còn giá trị tuyệt đối! nghĩa là có thể sinh lỗi do sai đường dẫn
(Thank to NoBi)

Re: Path của Application

Đã gửi: CN 15/03/2009 3:44 pm
gửi bởi vie87vn
Với VB.NET

Mã: Chọn hết

  1. IO.Path.GetDirectoryName(Application.ExecutablePath)

C#

Mã: Chọn hết

  1. System.IO.Path.GetDirectoryName(Application.ExecutablePath)

---
Lưu ý: Đây là path của Exe file không phải là Path của Solution :-S .
Mà pác nào bit lấy path của Solution hok, chỉ em luôn. [-O<
----
Trời! Xin lỗi, post nhằm box rồi. Tai nhìn topic của pác trên trang chủ, click vào mà hok xem kỹ Box :((

Re: Path của Application

Đã gửi: CN 11/10/2009 7:12 pm
gửi bởi truongphu
1- VBS có thể áp dụng cho VB6

Mã: Chọn hết

  1. Set Path = CreateObject("WScript.Shell")
  2.     MsgBox Path.CurrentDirectory


2- Function VB6

Mã: Chọn hết

  1. Private Function APath(ByVal FName As String) As String
  2.     If Right(App.Path, 1) <> "\" Then
  3.         APath = App.Path & "\" & FName
  4.     Else
  5.         APath = App.Path & FName
  6.     End If
  7.     MsgBox APath
  8. End Function

Re: Path của Application

Đã gửi: T.Sáu 10/05/2013 10:47 am
gửi bởi solverpvd
Thế trong VB.Net thì sao bác truongphu

Re: Path của Application

Đã gửi: T.Năm 13/06/2013 10:49 am
gửi bởi nmdang479
Mấy anh giúp em vấn đề này với :
Em có 2 macros điều có chức năng load fields.xml . Đó là 2 macro riêng nhưng khi em lấy macro1 chọn đường dẫn đến .xml A save lại thì macro2 cũng tự động nhận đường dẫn cho macro1 đã chọn.