使用第一个工作表VBA的名称重命名工作簿

使用第一个工作表VBA的名称重命名工作簿,vba,excel,Vba,Excel,我想将文件夹中的每个工作簿重命名为工作簿中第一个工作表的名称。例如,如果工作簿名为“71107”,而该工作簿中的工作表名为“foobar”,我希望将工作簿重命名为“foobar” 我目前的进展如下: Sub RunMe() Dim objFSO As New FileSystemObject Dim objWkbk As Workbook Dim objFile As File Dim folderpath As String Application.ScreenUpdating = Fals

我想将文件夹中的每个工作簿重命名为工作簿中第一个工作表的名称。例如,如果工作簿名为“71107”,而该工作簿中的工作表名为“foobar”,我希望将工作簿重命名为“foobar”

我目前的进展如下:

Sub RunMe()
Dim objFSO As New FileSystemObject
Dim objWkbk As Workbook
Dim objFile As File
Dim folderpath As String

Application.ScreenUpdating = False

folderpath = "D:\test\"

For Each objFile In objFSO.GetFolder(folderpath).Files
    oldpath = objFile.path
    Set objWkbk = Workbooks.Open(oldpath)
    newpath = path & "NEWNAME\" & ActiveSheet.Name & ".xls"
    objWkbk.SaveAs Filename:=newpath
    objWkbk.Close
Next objFile
End Sub

这段代码运行非常慢(每个文件大约10秒)。我的文件不是很大,每个只有40kb左右。有没有更快的方法来执行此操作?我也不需要保存每个文件的新副本,我很乐意重命名该文件,但我不知道如何进行重命名。

有两件事需要很长时间,一件是打开的,另一件是另存为。 如前所述,使用ADO可以避免打开,更多详细信息如下所示

然后,您也不能使用SaveAs,因为它未打开,但您可以使用以下方法重命名该文件:

Name GivenLocation & OldFileName As GivenLocation & NewFileName

这是事实,除了在后台运行一个隐藏的Excel实例,这样会更快一些。唯一的其他方法是使用ADO返回已关闭书本的第一页的名称