【问题标题】:Rename excel file with VBA用VBA重命名excel文件
【发布时间】:2021-05-24 19:43:27
【问题描述】:

我正在从零开始创建一个 excel 文件,添加内容并保存它。保存后,我想使用 VBA 代码重命名 excel 文件。我要重命名的文件与我正在编写代码的文件不同。

目前我正在尝试这样做(这是我的代码的 sn-p,只是为了显示我如何保存文件):

    Dim workbook1 As Workbook
    Dim name As String, lastcell As String
    Dim oldname As String, newname As String

    Set workbook1 = Application.Workbooks.Add

    name = "financial report - "

    workbook1.SaveAs ThisWorkbook.Path & "\" & name & ".xlsx"    
    
    'lastcell has a date that I want in my new title
    lastcell = Range("A1").End(xlDown).Text

    oldname = ThisWorkbook.Path & "\" & name & ".xlsx"
    newname = ThisWorkbook.Path & "\" & name & lastcell & ".xlsx"

    Name oldname As newname

但是当我运行它时,我得到了这个:

我的lastcell 变量中的值应该是像dd/mm/yyyy 这样的日期格式。我尝试复制并用作新 Excel 名称一部分的确切单元格是 05/02/2021

sub 末尾的 name 值应该是financial report - 05/02/2021

如果以前没有人问过这个问题,我会感到惊讶。有人知道我做错了什么或对我的代码有任何建议吗?

【问题讨论】:

  • 当您使用SaveAs 保存工作簿文件时,它会保持打开状态。只要它处于打开状态,就不能移动、删除或重命名它。但是为什么不直接用正确的名字存储呢?
  • 希望我能。每当我尝试以这种方式保存它时,我都会收到一个“1004”错误,告诉我有几个可能的原因。
  • @Sena 但这是唯一的方法,那时您可能问错了问题(请参阅What is the x/y problem)。因为正如 FunThomas 所说,只要它是打开的,你就不能重命名它,当你关闭它时,你的 VBA 就会停止(你不能再用 VBA 重命名它了)。所以正确的方法是下面的答案。
  • 添加 Debug.Print oldnameDebug.Print newname 并查看输出的样子。第一个是现有文件,第二个是有效文件名吗?如果lastcell 有一个日期,它的格式是否可以作为文件名的一部分有效?
  • Just tested it,它看起来像一个有效的名称 - 实际上就像它应该工作的那样。我使用VarType 来查看lastcell 的值的类型是什么,它是一个字符串。我不确定我还能做什么。

标签: excel vba


【解决方案1】:

您需要提供一个可以作为文件名一部分的日期值:

lastcell = Format(Range("A1").End(xlDown),"yyyy-mm-dd")

【讨论】:

    【解决方案2】:

    【讨论】:

    • 您好 Johnniel,我尝试了您的代码,但出现运行时错误 '1004' 。它说有几个可能的原因。 “文件名或路径不存在”(我很确定不是这种情况)、“该文件正被另一个程序使用”或“您尝试保存的工作簿与当前同名打开工作簿”。如果我将它保存为副本,那么它就不可能是第二个了。
    • 1004 根据我的经验涵盖了各种无效文件名类型的东西,我猜这意味着您很可能正在尝试将带有宏的工作簿保存为 .xlsx 文件,因此请查看定义变量workbook1 我建议
    • 不是这样,我要保存的文件没有宏。我会继续寻找,非常感谢。
    • 正斜杠把它搞砸了——在这种情况下它是一个非法字符。如果最后一个单元格始终是日期,只需执行 format(lastcell, "yyyy-mm-dd") 之类的操作
    • @Sena:是的,很可能,这就是原因。请尝试lastcell = Format(Range("A1").End(xlDown).Text, "dd_mm_yyyy")
    【解决方案3】:

    您的问题05/02/2021 不能作为文件名的一部分,因为文件名中不允许使用斜杠/。斜杠和反斜杠被认为是路径分隔符。

    尝试以下操作:确保变量正确声明如下,以确保日期被读取为数字日期,而不是一些无法格式化的文本。

    Dim Name As String    
    Name = "financial report - "
    
    Dim ReportDate As Date
    ReportDate = Range("A1").End(xlDown).Value 'make sure you read the `.Value` not `.Text`
    
    workbook1.SaveAs ThisWorkbook.Path & "\" & Name & ".xlsx"    
    workbook1.SaveCopyAs ThisWorkbook.Path & "\" & Name & Format$(ReportDate, "yyyy-mm-dd") ".xlsx"
    

    还可以使用.SaveAs 保存原始工作簿,使用.SaveCopyAs 保存附有日期的副本。

    【讨论】:

    • 我设法解决了这个问题。我有两个主要问题:1)日期格式和 2)打开的工作簿(路径/文件访问错误)。我会接受蒂姆的回答,因为它看起来更像我所做的代码并且有效。但是感谢您的帮助,实际上是每个人的帮助!
    猜你喜欢
    • 2022-01-23
    • 2018-04-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    相关资源
    最近更新 更多