2017-02-25 19 views
5

Tôi mới trong VBA và dưới đây là mã của tôi không hoạt động, bất kỳ ai trong số các bạn có thể trợ giúp không?Trích xuất đường dẫn từ tên tệp đầy đủ trong VBA

Dim nPath1() As String 
nPath1() = Split(nPath, "\")  

'Declare path as integer 
Dim path As Integer 
'Getting array length 
path = UBound(nPath1()) 
Dim lastname As String 
'For Loop 
For i = 0 To path-1 
    lastname += nPath1(i)+"\" 
Next i 

Mã trên không hoạt động; chuỗi đường dẫn của tôi là Root \ zTrash - Không còn cần \ NOC \ NOC và những gì tôi muốn là Root \ zTrash - Không còn cần \ NOC.

Trả lời

10

Nếu bạn chỉ muốn xóa mục cuối khỏi đường dẫn, bạn có thể thực hiện theo cách này:

Left(nPath, InStrRev(nPath, "\") - 1) 
  • InStrRev tìm thấy vị trí của sự xuất hiện cuối cùng của \

  • Left truncates chuỗi cho đến khi vị trí đó

  • 0.123.
  • Các -1 là bởi vì bạn cũng muốn loại bỏ cuối cùng \

-1

này

For i = 0 To path-1 

cung cấp cho bạn đầy đủ mảng nPath1. Nếu bạn muốn bỏ qua phần tử cuối cùng (và tôi không chắc bạn muốn gì), bạn nên sử dụng đường dẫn-2

2

Hoặc bạn có thể thử:

Sub sTest1() 
Dim nPath1 As Variant, st As String 
st = "Root\zTrash - No longer needed\NOC\NOC" 
nPath1 = Split(st, "\") 
ReDim Preserve nPath1(UBound(nPath1) - 1) 
st = Join(nPath1, "\") 
Debug.Print st 
End Sub 

này rất hữu ích nếu bạn muốn loại bỏ nhiều hơn một mục (không chỉ là cuối cùng) bằng cách thay đổi 1 thành 2 hoặc 3 ví dụ:

Sub sTest2() 
Dim nPath1 As Variant, st As String, n As Long 
st = "Root\zTrash - No longer needed\NOC\NOC" 

For n = 1 To 3 
    nPath1 = Split(st, "\") 
    ReDim Preserve nPath1(UBound(nPath1) - n) 
    Debug.Print Join(nPath1, "\") 
Next 

Kết quả:

Root\zTrash - No longer needed\NOC 
Root\zTrash - No longer needed 
Root 
1

Nếu bạn là fan hâm mộ của các công thức dài, đây là một lựa chọn:

left(nPath,len(nPath)-len(split(nPath,"\")(ubound(split(nPath,"\"))))) 
  • Ý tưởng là bạn chia bởi \
  • Sau đó, bạn nhận được giá trị cuối cùng trong mảng (với ubound, nhưng bạn chia hai lần)
  • Sau đó, bạn nhận được sự khác biệt giữa nó và toàn bộ chiều dài
  • Sau đó, bạn chuyển sự khác biệt này sang bên trái làm thông số
+0

tôi thích nó. Nhưng nếu npath = "", nó wil lỗi vì chia không thân thiện với vbnullstring. Tự hỏi nếu nó nhanh hơn sau đó ASH của giải pháp mặc dù. –

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