运行 文件将文本字符串重命名为 VBA 语句

Run file rename text string as a VBA statement

我想使用存储在 MS Access 子表单文本框中的 VBA 命令重命名文件。可能需要注意的是,VBA 命令是使用数据库查询中的串联公式生成的,并复制到文本框中。

这实际上是我尝试使用的代码,但我得到了 runtime error 2434 - The expression you entered contains invalid syntax。可能有比使用 eval() 命令更好的方法。

Public Function BulkRenameFile()
    Dim script As String
    script = "Name ""c:\ipfimport\PE2258N275420.jpg"" As ""c:\ipfimport\PE2258N2754\PE2258N2754_PH1_20141216_2620.jpg"""
    BulkRenameFile = Eval(script)
    MsgBox ("Photo Renaming Complete")
End Function

如有任何帮助,我们将不胜感激。

我 post 这里有两个不同的例程,第一个用于重命名单个文件,第二个用于重命名文件夹中的所有文件(或将文件从一个文件夹移动到另一个文件夹)。第二个接受仅重命名某种文件的过滤器。它们都使用 FileSystemObject 组件(您必须包括 Microsoft Scripting Runtime)。

'--------------------------------------------------------
' Rename a file (returns the number of error, if any)
'--------------------------------------------------------
Public Function FileRename(strSourceFileName As String, strTargetFileName As String) As Integer
On Error GoTo Err_FileRename
    Dim fso As FileSystemObject

    Set fso = New FileSystemObject

    fso.MoveFile strSourceFileName, strTargetFileName

    Set fso = Nothing

Exit_FileRename:
    FileRename = Err.Number
    Exit Function

Err_FileRename:
    GoTo Exit_FileRename

End Function

'--------------------------------------------------------
' Massively rename files
'--------------------------------------------------------
Public Sub MoveFiles(SourceFolderPath As String, DestinationFolderPath As String, 
                     _ Optional FileFilter As String = "*.*")

    Dim fso As FileSystemObject, fld As Folder, fil As File
    Dim strDestinationFilePath  As String

    Set fso = New FileSystemObject
    Set fld = fso.GetFolder(SourceFolderPath)

    For Each fil In fld.Files

        If fil.Name Like FileFilter Then

            strDestinationFilePath = DestinationFolderPath + "\" + fil.Name
            FileMove fil.Path, strDestinationFilePath

        End If

    Next fil

    Set fld = Nothing
    Set fso = Nothing
End Sub

最后我更改了查询中的字段表达式,它构建了一个从 VBA 代码到 DOS 代码的重命名命令。我将 DOS 重命名代码的完整数据表列粘贴到文本框中。文本框导出为 .txt 文件,然后 运行 作为 windows DOS 命令 shell.

中的 .bat

粘贴到文本框中的 DOS 重命名命令示例:

rename "c:\ipfimport\PE2152N2380\*7112.jpg" "PE2152N2380_LT_T25_20140516_7112.jpg"
rename "c:\ipfimport\PE2152N2380\*7113.jpg" "PE2152N2380_LT_T25_20140516_7113.jpg"

最终工作代码:

Function FileRename()
 
Dim fso As New FileSystemObject
Dim stream As TextStream

strPath = [Forms]![File Rename > Main].Text_FilePathBase.Value
strFile = "Rename.bat"

Set stream = fso.CreateTextFile(strPath & strFile, True)

Debug.Print strPath & strFile

strForm = [Forms]![File Rename > Main].Text_PasteRenameScript.Value

stream.Write strForm

stream.Close
Set fso = Nothing
Set stream = Nothing

Call Shell(strPath & strFile, vbNormalFocus)

MsgBox ("Renaming Complete")

End Function