【问题标题】:Finding Filename only and not entire path VBA Mac Office 2011仅查找文件名而不是整个路径 VBA Mac Office 2011
【发布时间】:2016-08-07 08:05:01
【问题描述】:

所以我有一个宏正在运行,但是它当前循环通过列 A 来查找拉文件名路径(即 Macintosh HD:Users:username:path:to:filename)。我希望它只找到文件名而不是完整路径。路径将不断变化,因此它必须有一种仅提取文件名的方法。我看过使用 GetFileName,但是我使用的是 Mac Office 2011,所以我在让它工作时遇到了问题。有什么想法吗?

Sub CSVauto()
'
' CSVauto Macro
'
' Keyboard Shortcut: Option+Cmd+x
'
'   Declaring and setting variables for choosing CSV to import
    Dim csvFileName As Variant


''Prompt window to choose csv file
csvFileName = Application.GetOpenFilename(FileFilter:="")
If csvFileName = False Then Exit Sub
'Setting a variable to find Experimental form name in Data Summary
Dim whatToFind As String 'Declaring that variable
    If Right(csvFileName, 4) = ".csv" Then
        whatToFind = Replace(csvFileName, ".csv", "")
        MsgBox (whatToFind)
    End If
'Looping through A column to find csvFileName without .csv extension
Set cell = Range("A:A").Find(What:=whatToFind, LookIn:=xlValues, _
       LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
      MatchCase:=False)

If Not cell Is Nothing Then
      cell.Select
   End If

添加

Dim whatToFind As String 'Declaring that variable
Dim NoCsv As String
    If Right(csvFileName, 4) = ".csv" Then
        NoCsv = Replace(csvFileName, ".csv", "")
        whatToFind = Replace(NoCsv, ThisWorkbook.Path, "")‹

这给出了一个部分路径,而不是完整路径,它只是 :FolderonDesktop:FolderofCSV:Filename

我以为它只会给我文件名,但至少我能够砍掉它的一部分。现在我只需要摆脱两个层次就可以了。

【问题讨论】:

    标签: vba filenames


    【解决方案1】:

    使用InStrRev 查找文件路径中最后一次出现\ 的索引,使用MidRight 返回文件路径的文件名部分。


    Function getFileName(FilePath As String) As String
    
        getFileName = Mid(FilePath, InStrRev(FilePath, "\") + 1)
    
    End Function
    

    MAC

    Function getFileName(FilePath As String) As String
    
        getFileName = Mid(FilePath, InStrRev(FilePath, "/") + 1)
    
    End Function
    

    【讨论】:

    • 当我将它添加到宏中时,我不断收到错误,它需要一个 End sub,而我最后有一个。我添加了您的代码,但将“\”替换为“:”,因为我使用的是 Mac,所以目录结构不同。知道这是否适用于 mac?
    • 我做到了,根据一些研究,我似乎无法用函数做到这一点,我是否为函数创建了一个完全不同的宏?抱歉不熟悉功能。
    • 函数是一个返回值的宏。 Functions 和 Subs 不能相互嵌套。在您的子系统中,您可以使用它来代替 NoCsv = Mid(csvFileName, InStrRev(csvFileName, "/") + 1)
    • 宾果游戏!!!这非常有效。由于macs报告该文件路径类型,我只需要用“:”替换“/”。谢谢!
    • 很高兴能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 2021-10-15
    • 1970-01-01
    • 2021-06-01
    • 2012-01-21
    相关资源
    最近更新 更多