vba编写一个宏来更改工作簿名称中的数字

时间:2015-01-06 21:36:33

标签: excel-vba concatenation filenames renaming vba

我想要一个年初变化的宏,例如,

Workbooks("cash 2014.xlsx").Worksheets("sum").Activate

Workbooks("cash 2015.xlsx").Worksheets("sum").Activate

我已经创建了2015年1月1日给我d = 2015的步骤,以便我可以写

y = "cash " & d & ".xlsx", which yields cash 2015.xlsx (with no quotes).

如果我再写     工作簿(Y).Worksheets("和&#34)。激活, 要么     工作簿(" Y&#34)工作表("和&#34)。激活, Excel不会运行任何一个。

VBA也不承认:     工作簿(""现金"& d&" .xlsx"")。激活 要么     工作簿('"现金"& d&" .xlsx"')。激活 要么     工作簿("''& d&' .xlsx')。激活

2 个答案:

答案 0 :(得分:0)

您可以使用:

Workbooks("cash" & d & ".xlsx").Activate

或者

y = "cash " & d & ".xlsx"
Workbooks(y).activate

如果您在变量周围加上引号,它们就会成为字符串,并且只是dy

此外,最好为您的变量设置名称,以便下一个必须维护您的代码的人不会在您的新工作中找到您,并用一对来刺伤您的眼球。筷子一边尖叫一边猥亵你。

答案 1 :(得分:0)

如果你想打破旧名称并用新年重命名,试试这个。

只要表格是" AAAA ####。\ text"名称和年份之间的空格。

这将采用旧名称,突破年份,添加一个,然后另存为新名称。

Sub RenameNewYear()
Dim oldPath As String, path As String, OldName As String, fileExt As String
Dim tempYear As Long, newYear As Long
Dim old() As String
Dim Filename As String, FileNPath As String

    path = ActiveWorkbook.path    'C:\users\owner\desktop
    OldName = ActiveWorkbook.Name '"cash 2015.xlsm"   

    'Split original name up into sections.  
    old = Split(OldName, ".")     'old(0) = "cash 2014", old(1) = "xlsm"
    fileExt = "." & old(1)        '.xlsm
    old = Split(old(0), " ")      'old(0) = "cash", old(1) = "2014"

    tempYear = CLng(old(1))       '2014
    newYear = tempYear + 1        '2015

    Filename = (old(0) & " " & newYear & fileExt)   '"cash 2015.xlsm"

    FileNPath = path & "\" & Filename           'C:\users\owner\desktop\cash 2015.xlsm

    ActiveWorkbook.SaveAs fileName:=FileNPath
    Sheets("sum").Activate
End Sub

要打开它,你可以使用它:但它已经打开,因为最后一个代码保存为新名称。

Workbooks.Open Filename:=FileNPath