【问题标题】:VBA - Extract Particular Folder Name from PathVBA - 从路径中提取特定文件夹名称
【发布时间】:2023-03-12 01:14:02
【问题描述】:

我有以下代码,但我需要调整。我希望用户从项目中选择一个特定的文件夹。想象一下路径“C:\Project\SomeOtherFolder\WINDOW”。如果选择了“WINDOW”文件夹,则以下代码仅填充文本框。我只是用它来检查用户,但我实际上希望文本框填写“项目”。

Using fb As New FolderBrowserDialog
    If fb.ShowDialog = Windows.Forms.DialogResult.OK AndAlso _
    (IO.Path.GetFileName(fb.SelectedPath) = "WINDOW") Then
        TextBox1.Text = IO.Path.GetFileName(fb.SelectedPath)
    Else
        Exit Sub
    End If
End Using

请问我该怎么做?非常感谢!!!

【问题讨论】:

  • 对不起,我有点困惑。你想要 Project 吗?或者从 *C:\* 到下一个 *\* 之后的任何内容,您都可以在路径中找到?
  • @PaulFrancis 嗨,基本上用户必须选择格式为“*\SomeProjectName\*\WINDOW”的路径,我需要返回“SomeProjectName”。因此,对于他们选择的任何“窗口”文件夹,我需要两个文件夹。希望这是有道理的!
  • WINDOW 总是文件名吗?
  • 是的。他们必须始终选择该名称的文件夹。并且项目名称总是后面两个文件夹。
  • 这是 VBA 还是 C#?使用VBA,我也许可以为您提供解决方案。基本是使用当前结构,使用 IF 确保 WINDOW 是路径的最后一部分。使用 Split 函数,然后 UBound(theArray) - 2 会给你两个向上的文件夹名称。

标签: vba folderbrowserdialog


【解决方案1】:

这个 UDF,应该可以满足您的需求。我创建了从特定文件夹位置返回文件夹名称的函数。我已经包含了一些可选参数,因此您可以(如果需要)更改要求。

Public Function GetFolderName(FolderPath As String, _
                              Optional endPath As String = "WINDOW", _
                              Optional moveUp As Integer = 2) As String
    Dim tmpArr() As String, retStr As String

    tmpArr = Split(FolderPath, "\")

    If InStr(FolderPath, endPath) <> 0 And moveUp <= UBound(tmpArr) Then
        retStr = tmpArr(UBound(tmpArr) - moveUp)
    End If

    GetFolderName = retStr
End Function

所以代码遍历。您发送在上一步中获得的路径,然后您只需将函数调用为,

TextBox1.Text = GetFolderName(fb.SelectedPath)
'Or - However this is redundant as the Optional Parameters are declared as such by default
TextBox1.Text = GetFolderName(fb.SelectedPath, "WINDOW", 2)

以上内容会将您的文本框填充为“项目”。希望这会有所帮助!

【讨论】:

  • 别担心!祝你好运:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多