想要使用excel vba在文件扩展名之前添加后缀

时间:2017-03-22 02:57:40

标签: excel vba excel-vba

我有下面的代码,它将列出的后缀和前缀添加到“B”列中列出的文件名中。但问题是,它在文件扩展后添加后缀。我想在文件名末尾添加文本。 即如果文件名是test.txt而我想要,1test9.txt但代码将其重命名为1test.txt9

Sub Add_Pre_Suf()
Dim Pre, Suf As String
Dim r As Range
Pre = Range("C2").Value
Suf = Range("D2").Value
Range("B2").Select
'Range(Selection, Selection.End(xlDown)).Select
Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row).Select
With Selection

    For Each r In Selection
        r.Value = Pre & r.Value & Suf
    Next

End With
RenameFiles
End Sub

3 个答案:

答案 0 :(得分:2)

您可以使用Scripting.FileSystemObject。只需添加对Microsoft Scripting Runtime的引用:

With New Scripting.FileSystemObject
    Dim filePath As String
    filePath = r.Value
    r.Value = Pre & .GetBaseName(filePath) & Suf & "." & _
              .GetExtensionName(filePath)
End With

答案 1 :(得分:1)

您看到此行为的原因是您的B列已经具有文件扩展名。您可以从列中拆分文件扩展名,并在添加文件扩展名之前添加后缀。您可以更改代码以执行类似操作。

With Selection
    For Each r In Selection
        r.Value = Pre & left(r.Value,find(".",r.Value)-1) & Suf & right (r.Value,len(r.Value)-find(".",r.Value)+1)
    Next
End With

编辑:一个更好的代码,适用于任意数量字符的扩展。

答案 2 :(得分:1)

这应该很好地完成工作: -

Sub Add_Pre_Suf()
        ' 21 Mar 2017

        Dim Pre As String, Suf As String
        Dim Splt() As String
        Dim Ext As String
        Dim R As Long, Rend As Long

        Pre = Range("C2").Value
        Suf = Range("D2").Value

        Rend = Cells(Rows.Count, "B").End(xlUp).Row
        For R = 2 To Rend
            With Cells(R, 2)                     ' 2 = "B"
                If Len(.Value) Then
                    Splt = Split(.Value, ".")
                    Ext = Splt(UBound(Splt))
                    ReDim Preserve Splt(UBound(Splt) - 1)
                    .Value = Pre & " " & Trim(Join(Splt, ".")) & " " & Suf & "." & Ext
                End If
            End With
        Next R

        RenameFiles
    End Sub

在调用此代码时要小心,因为它没有指定工作表,因此处理ActiveSheet。如果没有先检查名称是否符合我的预期,我就不会调用'RenameFiles'程序。

请注意,Range("C2")可能会被称为Cells(2, 3)