【问题标题】:Get part of string that matches with another string获取与另一个字符串匹配的部分字符串
【发布时间】:2017-12-12 11:05:10
【问题描述】:

我正在为 Excel 做一个 VBA 宏,我需要获取与特定字符串匹配的文件路径部分。

我的意思是,我有一个名为 FileInfo 的 Variant,其中包含我当时正在使用的工作簿的路径(在 For 中),例如,Variant 可能如下所示:

C:\Users\myUser\Desktop\SVN-Folder\trunk\G\INC20825\Estimación Temporal_v01r00.xlsx

我想做一个函数,它只返回与"INC*"匹配的路径部分,如果路径不匹配,则返回null。

所以这种情况下的函数可能会返回:INC20825

我试过了,但没有用

'This function returns the INC folder where is contained
Function INCFolder(FileInfo As Variant)
Dim i As Integer

If FileInfo Like "INC*" Then
    i = InStr(FileInfo, "INC")
    INCFolder = Mid(FileInfo, i, 8)
Else
    INCFolder = Null
End If

End Function

编辑部分解决方案: 我使用以下代码获取了 INC* 的 8 个字符:

'This function returns the INC folder where is contained
Function INCFolder(FileInfo As Variant)
Dim i As Integer

i = InStr(FileInfo, "INC")

If i = 0 Then
    INCFolder = Null
Else
    INCFolder = Mid(FileInfo, i, 8)
End If

End Function

INC 大于或小于 8 时会出现问题

【问题讨论】:

  • 路径中的 INC 部分是否总是有 8 个字符?我会让它更有活力
  • 是的,它可能没有 8 个字符,但我不知道如何使它更动态
  • @Pablo.x 在下面看到我的回答,它会让你更加灵活,并且可以灵活处理任意数量的字符
  • 是的,刚刚意识到,效果很好,非常感谢!

标签: vba excel


【解决方案1】:

您可以使用Split 将\ 与PathArr 数组元素的完整路径分开,然后遍历PathArr 元素并查找"INC" 。

下面的代码将为您提供灵活的“INC”字符数。

代码

Option Explicit        

Sub test()

Const FullName = "C:\Users\myUser\Desktop\SVN-Folder\trunk\G\INC20825\Estimación Temporal_v01r00.xlsx"
Dim INCSection As String

INCSection = INCFolder(FullName)

End Sub

Function INCFolder(FileInfo As Variant) As String

    Dim i As Long
    Dim PathArr As Variant

    If FileInfo Like "*INC*" Then
        PathArr = Split(FileInfo, "\") ' split folders to array

        For i = 0 To UBound(PathArr) ' loop through array and look for "*INC*"
            If PathArr(i) Like "*INC*" Then
                INCFolder = PathArr(i)
                Exit Function
            End If
        Next i
    Else
        INCFolder = "Error!"
    End If

End Function

【讨论】:

  • 效果很好,非常感谢您的回答,这就是我正在尝试的。
  • 这正是我的建议
  • 是的,完全正确:D
【解决方案2】:

只需在Like 中再添加一个*:

Option Explicit

Public Const pathName = "C:\Folder\trunk\G\INC20825\Estimación Temporal_v01r00.xlsx"


Function INCFolder(FileInfo As Variant)
    Dim i As Long

    If FileInfo Like "*INC*" Then
        i = InStr(FileInfo, "INC")
        INCFolder = Mid(FileInfo, i, 8)
    Else
        INCFolder = False
    End If

End Function

【讨论】:

  • 这也有效,我刚刚编辑了我的问题,因为我“找到”了一种让它适用于 8 个字符的方法
【解决方案3】:

只是获得结果的另一种方式

Function INCFolder(FileInfo As Variant)
    If FileInfo Like "*INC*" Then
        INCFolder = Mid(WorksheetFunction.Substitute(Mid(FileInfo, InStr(FileInfo, "\INC"), Len(FileInfo)), "\", "|", 2), 2, WorksheetFunction.Search("|", WorksheetFunction.Substitute(Mid(FileInfo, InStr(FileInfo, "\INC"), Len(FileInfo)), "\", "|", 2)) - 2)
    Else
        INCFolder = Null
    End If
End Function

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 2020-08-28
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2021-08-17
    相关资源
    最近更新 更多