Visual Basic Excel函数用于命名单元格内容以外的文件

Visual Basic Excel函数用于命名单元格内容以外的文件,excel,vba,Excel,Vba,我正试图用Visual Basic编写一个函数,根据某些单元格中的值创建电子表格的文件名 到目前为止,我一直在使用以下代码: Public Sub SaveAsA1() ThisFile = "RWO_" + Format(Now(), "yyyymmdd") + "_" + Format(Now(), "hhmm") + "_" + Range("D4").Value + "_" + Range("F5").Value + "_" + Range("D8").Value ActiveWorkb

我正试图用Visual Basic编写一个函数,根据某些单元格中的值创建电子表格的文件名

到目前为止,我一直在使用以下代码:

Public Sub SaveAsA1()
ThisFile = "RWO_" + Format(Now(), "yyyymmdd") + "_" + Format(Now(), "hhmm") + "_" + Range("D4").Value + "_" + Range("F5").Value + "_" + Range("D8").Value
ActiveWorkbook.SaveAs Filename:=ThisFile
End Sub 
此代码在我第一次保存文件时起作用,但是,每当我重新保存文件时,它不会根据单元格中的新值更新文件名


有人知道我如何编写一个函数来实现这一点吗

您可以尝试在保存事件之前为
添加代码。它将正常保存文件,但每次按“另存为”按钮时,它都会按预期更改名称

此代码应位于
此工作簿
模块(工作簿模块)中


请注意,我已经更改了
此文件
,在time中添加了
ss
,并在末尾添加了
.xlsm
扩展名。此外,我还将
文件格式参数
添加到
.SaveAs方法

您可以尝试在保存事件之前为
添加代码。它将正常保存文件,但每次按“另存为”按钮时,它都会按预期更改名称

此代码应位于
此工作簿
模块(工作簿模块)中


请注意,我已经更改了
此文件
,在time中添加了
ss
,并在末尾添加了
.xlsm
扩展名。我还将
FileFormat参数
添加到
.SaveAs方法

中,是否有任何错误消息?它是否会更改名称的时间和日期部分,或者不会更改名称中的任何内容?它不会引发任何错误。在修改名称后,它不会更改名称中的任何内容,包括日期和时间。请将名称的时间部分更改为:
格式(Now(),“hhmmss”)
,以这种方式在即时窗口中测试时查看其工作情况:
?“RWO”+格式(现在(),“yyyymmddss”)+“+”格式(现在(),“hhmm”)+“+”范围(“D4”)。值+“+”范围(“F5”)。值+“+”范围(“D8”)。值
。。。是不是?我不熟悉使用即时窗口。但是,我确实在时间格式的末尾添加了“ss”。现在我注意到,每次运行代码时,VisualBasic窗口标题栏上的.xlsm文件名都会以新的秒数更新。看起来文件名可能正在更新。但是,每当我单击“另存为”时,“另存为”窗口对话框中的文件名将保留为旧文件名。是否希望每次在Excel应用程序中按“另存为”按钮时运行此代码?您正在运行哪个Office版本?是否有任何错误消息?它是否会更改名称的时间和日期部分,或者不会更改名称中的任何内容?它不会引发任何错误。在修改名称后,它不会更改名称中的任何内容,包括日期和时间。请将名称的时间部分更改为:
格式(Now(),“hhmmss”)
,以这种方式在即时窗口中测试时查看其工作情况:
?“RWO”+格式(现在(),“yyyymmddss”)+“+”格式(现在(),“hhmm”)+“+”范围(“D4”)。值+“+”范围(“F5”)。值+“+”范围(“D8”)。值
。。。是不是?我不熟悉使用即时窗口。但是,我确实在时间格式的末尾添加了“ss”。现在我注意到,每次运行代码时,VisualBasic窗口标题栏上的.xlsm文件名都会以新的秒数更新。看起来文件名可能正在更新。但是,每当我单击“另存为”时,“另存为”窗口对话框中的文件名将保留为旧文件名。是否希望每次在Excel应用程序中按“另存为”按钮时运行此代码?您正在运行哪个Office版本?非常感谢。这正是我想做的。很好地解决并实施了它,+1非常感谢。这正是我想做的。很好地解决了这个问题并实现了+1
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    If SaveAsUI = True Then

        Application.EnableEvents = False
        Dim ThisFile As String

        ThisFile = "RWO_" + Format(Now(), "yyyymmdd") + "_" + Format(Now(), "hhmmss") + "_" + Range("D4").Value + "_" + Range("F5").Value + "_" + Range("D8").Value & ".xlsm"
        ActiveWorkbook.SaveAs Filename:=ThisFile, FileFormat:=XlFileFormat.xlOpenXMLWorkbookMacroEnabled
        Application.EnableEvents = True
        Cancel = True
    End If

End Sub