我正在尝试将单元格值分割为字符串中的最后一个“\” 单元格A1中的'C:\ Users \ punateng \ Desktop \ Pending Spec Updates.xlsx',因此单元格B1中的结果应为'C:\ Users \ punateng \ Desktop \'
我写了以下代码:
Sub mu()
Cells(1, 2).Value = Split(Cells(1, 1).Value, "\")
End Sub
但是我在C单元格中获得结果。
请帮忙。
答案 0 :(得分:2)
Split
返回一个字符串数组,在这种情况下,它将包含先前由\
分隔的输入文本的每个部分 - 所以,您实际上是返回数组{{1} }。当您尝试将其粘贴到{"C:";"Users";"punateng";"Desktop";"Pending Spec Updates.xlsx"}
时,VBA只会将其解释为字符串数组的第一个元素。
相反,您可能想尝试
Cells(1,2)
应该找到Cells(1,2).Value=Left(Cells(1,1).Value,InstrRev(Cells(1,1).Value,"\")-1)
的最后一个实例并返回它之前的文本。
答案 1 :(得分:2)
这是一种功能优于子的情况。
Excel具有查找和搜索功能,但没有FindLast功能。
在用户定义函数(UDF)中,您可以使用Application.WorksheetFunction集合中不可用的某些函数。其中一个是InstrRev
,它找到第一个字符串实例的位置,如" \"从字符串的末尾向后读。使用这个知识和文本编辑功能的小宝石,你可以构建这个UDF:
Function FileNameFromPath(Path1 As String)
'Test if you have been parsed an network file path
If InStr(1, Path1, "\") > 0 Then
'Get whatever is after the last "\"
FileNameFromPath = Right(Path1, Len(Path1) - InStrRev(Path1, "\"))
Else
'Could be a SharePoint file with http// address
If InStr(1, Path1, "\") > 0 Then
'Get whatever is after the last "/"
FileNameFromPath = Right(Path1, Len(Path1) - InStrRev(Path1, "/"))
Else
'There isn't a path separator there
FileNameFromPath = "That ain't a path"
End If
End If
End Function
因此,您可以在工作簿中的任何单元格中调用此UDF,方法是键入" = fi",按Tab键将其粘贴到您的单元格中,然后选择要测试的单元格并输入结束括号& #34;)"