从VBA中的完整文件名提取path

我新的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 

上面的代码不工作; 我的pathstring是根\ zTrash – 不再需要\ NOC \ NOC ,我想要的是根\ zTrash – 不再需要\ NOC

如果你想从path中移除最后一项,你可以这样做:

 Left(nPath, InStrRev(nPath, "\") - 1) 
  • InStrRev查找最后一次出现的位置\

  • Left截断string,直到该位置

  • -1是因为你也想删除最后\

或者你可以尝试:

 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 

如果要通过更改1到2或3来删除多个项目(而不仅仅是最后一个),这非常有用,例如:

 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 

结果:

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

如果你是长公式的粉丝,这是另一种select:

 left(nPath,len(nPath)-len(split(nPath,"\")(ubound(split(nPath,"\"))))) 
  • 这个想法是,你分裂\
  • 然后你得到数组中的最后一个值(与ubound,但你分裂两次)
  • 那么你就会得到它和整个长度的区别
  • 然后,将这个差异作为parameter passing给左边

这个

 For i = 0 To path-1 

给你完整的nPath1数组。 如果你想跳过最后一个元素(而且我不确定你到底想要什么),你应该使用path-2