Excel VBA:每天从文件末尾删除格式化日期并重新保存

Excel VBA:每天从文件末尾删除格式化日期并重新保存,excel,vba,Excel,Vba,每天我都会收到一个自动文件,文件格式为DailyFile 09-12-18.xlsx 我编写了一个VBA模块来查找名为DailyFile的文件(本例中为DailyFile),并用新的每日数据更新必要的电子表格 但是,我需要一种方法来删除每日文件的日期部分,以便我的模块能够识别它,但我还需要保留每个每日文件的副本(文件名中包含日期)以备记录 换句话说,我的主电子表格需要从每日文件中提取最新数据(可以从昨天起覆盖),但我还想保存原始数据的副本 这是我到目前为止所拥有的。。。它不起作用: Option

每天我都会收到一个自动文件,文件格式为DailyFile 09-12-18.xlsx

我编写了一个VBA模块来查找名为DailyFile的文件(本例中为DailyFile),并用新的每日数据更新必要的电子表格

但是,我需要一种方法来删除每日文件的日期部分,以便我的模块能够识别它,但我还需要保留每个每日文件的副本(文件名中包含日期)以备记录

换句话说,我的主电子表格需要从每日文件中提取最新数据(可以从昨天起覆盖),但我还想保存原始数据的副本

这是我到目前为止所拥有的。。。它不起作用:

Option Explicit


Sub changefilename()

Dim tdate As Variant
Dim ofile As Workbook
Dim TestFile As String



tdate = Date
tdate.NumberFormat = "mm-dd-yy"

Set ofile = Workbooks.Open("C:\Users\Research\Documents\Daily File " & tdate & ".xlsx")
ofile.SaveAs Filename:=TestFile


End Sub

.NumberFormat
是一个单元格属性
tdate
不是单元格,而是变体,因此不具有该属性

使用
格式化
功能将其格式化:

Option Explicit

Sub changefilename()

    Dim tdate As Variant
    Dim ofile As Workbook
    Dim TestFile As String

    tdate = Format(Date, "mm-dd-yy")

    Set ofile = Workbooks.Open("C:\Users\Research\Documents\Daily File " & tdate & ".xlsx")
    ofile.SaveAs Filename:=TestFile

End Sub

.NumberFormat
是一个单元格属性
tdate
不是单元格,而是变体,因此不具有该属性

使用
格式化
功能将其格式化:

Option Explicit

Sub changefilename()

    Dim tdate As Variant
    Dim ofile As Workbook
    Dim TestFile As String

    tdate = Format(Date, "mm-dd-yy")

    Set ofile = Workbooks.Open("C:\Users\Research\Documents\Daily File " & tdate & ".xlsx")
    ofile.SaveAs Filename:=TestFile

End Sub

我自己也想出了一个类似的方法。我不知道数字格式是怎么工作的。已使用的格式()。。。工作得很有魅力。请参阅我的解决方案。@user10354299注意这个答案是如何解释内容和原因的,而不是简单地给出一个代码转储。像这样的答案对人们在谷歌上搜索类似问题的解决方案更有用,而这正是这个网站的最终目的所在;考虑把这个答案标记为“接受”,点击中空的复选标记。@ MARCUCYBOY2,我有意地把 tDe< /Cord>作为一个变体,因为我试图尽可能少地改变,以便很容易地追查到底是什么引起了错误。如果我重写这个,我可能会完全忽略变量,直接连接它。同样的道理,为什么
TestFile
没有价值。@MathieuGuindon是的,我经常访问该网站寻求帮助。非常感谢您的解释——我知道对于有类似问题的人来说,这会有多大帮助。我只是为自己解决了这个问题而感到自豪…想与大家分享。@user10354299完全没有伤害,自我回答,甚至是鼓励!如果你的回答能解释发生了什么事,我绝对会投赞成票(继续努力!我自己也想出了一个类似的方法。我不知道数字格式是怎么工作的。已使用的格式()。。。工作得很有魅力。请参阅我的解决方案。@user10354299注意这个答案是如何解释内容和原因的,而不是简单地给出一个代码转储。像这样的答案对人们在谷歌上搜索类似问题的解决方案更有用,而这正是这个网站的最终目的所在;考虑把这个答案标记为“接受”,点击中空的复选标记。@ MARCUCYBOY2,我有意地把 tDe< /Cord>作为一个变体,因为我试图尽可能少地改变,以便很容易地追查到底是什么引起了错误。如果我重写这个,我可能会完全忽略变量,直接连接它。同样的道理,为什么
TestFile
没有价值。@MathieuGuindon是的,我经常访问该网站寻求帮助。非常感谢您的解释——我知道对于有类似问题的人来说,这会有多大帮助。我只是为自己解决了这个问题而感到自豪…想与大家分享。@user10354299完全没有伤害,自我回答,甚至是鼓励!如果你的回答能解释发生了什么事,我绝对会投赞成票(继续努力!我想你的意思是
ofile.SaveAs文件名:=ofile\u Name
我个人认为我应该做
ofile\u Name=ofile.path&“\Daily File.xlsx”
而不是
Left(…)
我想你的意思是
ofile.SaveAs文件名:=ofile\u Name
我个人认为我应该做
ofile\u Name=ofile.path&“\Daily File.xlsx”
而不是
左(…)
Sub changefilename()

    Dim tdate As String
    Dim ofile As Workbook
    Dim ofile_Name As String

    tdate = Format(Date, "MM-DD-YY")

    Set ofile = Workbooks.Open("C:\Users\Research\Documents\Daily File " & tdate & ".xlsx")

    'change the character 9 to whatever the length of the file name
    ofile_Name = Left(ofile.Name, 9)

    ofile.SaveAs Filename:=ofile_Name   

End Sub