Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要使用excel vba在文件扩展名之前添加后缀吗_Vba_Excel - Fatal编程技术网

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

要使用excel vba在文件扩展名之前添加后缀吗,vba,excel,Vba,Excel,我有下面的代码,它将列出的后缀和前缀添加到“B”列中列出的文件名中。但问题是,它在文件扩展名后添加后缀。我想在文件名的末尾添加文本。 i、 e如果文件名是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 'R

我有下面的代码,它将列出的后缀和前缀添加到“B”列中列出的文件名中。但问题是,它在文件扩展名后添加后缀。我想在文件名的末尾添加文本。 i、 e如果文件名是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

为此,您可以使用
脚本.FileSystemObject
。只需添加对Microsoft脚本运行时的引用:

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

为此,您可以使用
脚本.FileSystemObject
。只需添加对Microsoft脚本运行时的引用:

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

您看到这种行为的原因是列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

编辑:一种更好的代码,适用于任何字符数的扩展名。

您看到这种行为的原因是您的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

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

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

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。如果不先检查名称是否确实是我期望的名称,我不会调用“重命名文件”过程


请注意,
范围(“C2”)
可能被称为
单元格(2,3)
这应该可以很好地完成这项工作:-

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。如果不先检查名称是否确实是我期望的名称,我不会调用“重命名文件”过程


请注意,
范围(“C2”)
可能被称为
单元格(2,3)

xlsx
?并非所有文件扩展名都有3个字符长。谢谢,我已经修改了代码以适应超过3个字符的扩展名。
xlsx
?并非所有文件扩展名都有3个字符长。谢谢,我已修改代码以容纳超过3个字符的扩展名。如果
.Value
不包含
这是一个运行时错误9(下标超出范围)。是的,此错误将发生在Redim行上。但是,如果单元格(R,2)中有内容,则很可能是一个有效的文件名,其中有一个句点。如果文件名无效,则在调用RenameFiles子文件之前将出现错误。为避免此类错误,请使Redim线路受制于以下条件:如果Ubound(Splt),则。。。并将端点If置于.Value行下方(下一端点If上方)。共产国际:您也可以检查文件是否存在于该点,但需要有该点的路径。很好。按预期工作。只是对下面的行做了一些小的更改,以便从添加空白处跳过:.Value=Pre&Trim(Join(Splt,“.”)&Suf&“&ExtIf
。Value
不包含
这是一个运行时错误9(下标超出范围)。是的,该错误将发生在Redim行。但是,如果单元格(R,2)中有内容,则很可能是一个有效的文件名,其中有一个句点。如果文件名无效,则在调用RenameFiles子文件之前将出现错误。为避免此类错误,请使Redim线路受制于以下条件:如果Ubound(Splt),则。。。并将端点If置于.Value行下方(下一端点If上方)。共产国际:您也可以检查文件是否存在于该点,但需要有该点的路径。很好。按预期工作。只是对下面的行做了一些小的更改,以便从添加空白处跳过:.Value=Pre&Trim(Join(Splt,“.”)和Suf&“&Ext