Excel VBA文件名更改

时间:2018-10-29 14:00:54

标签: excel vba excel-vba

我必须使用2个Excel工作簿:Book1october和Book2。 Book1october18是一个导入文件,这意味着它每月更改一次,并带有名称(下个月将是Book1november18)。我必须通过VBA代码自动将一些数据从Book1october复制到Book2。

这是我编写的代码:

Windows("Book1october18").Activate
Sheets("Sheet1").Activate
Range("B2:AQ5").Select
Selection.Copy
Windows("Book2").Activate
Sheets("Sheet1").Activate
Range("R2:BG5").Select
ActiveSheet.Paste

我的问题是,我不知道如何编写代码,以便在月份的名称以及年份发生变化时进行所需的操作。 (我必须在所有月份和2019年都做到这一点)

4 个答案:

答案 0 :(得分:4)

您可以使用Date()函数和Format()

自动更新工作簿名称。
Dim sWbName As String
sWbName = "Book1" & LCase(Format(Date, "mmmmyy"))

Debug.Print sWbName
'Prints Book1october18

答案 1 :(得分:3)

工作簿的名称/路径无关紧要。使用K.Davis's code来提供文件名,或提示用户打开路径/文件-将字符串放入某个componentDidUpdate(prevProps, prevState, snapshot)变量中,然后使宏打开工作簿。现在,您可以保存对该sourceBookPath对象的引用:

Workbook

现在,工作表。

Dim sourceBook As Workbook
Set sourceBook = Application.Workbooks.Open(sourceBookPath)

如果工作表始终被命名为“ Sheet1”,则可以执行以下操作:

Dim sourceSheet As Worksheet

或者,如果该工作表将始终是该书的第一张工作表(无论其名称如何),则可以执行以下操作:

Set sourceSheet = sourceBook.Worksheets("Sheet1")

一旦有了Set sourceSheet = sourceBook.Worksheets(1) 对象,就可以获取所需的Worksheet-但首先需要您的 target 。同样,如果宏打开了“ book2”,则事情会简单得多:

Range

还是由宏创建

Dim targetBook As Workbook
Set targetBook = Application.Workbooks.Open(targetBookPath)

无论如何,我们想要第一张纸:

Set targetBook = Application.Workbooks.Add

现在我们可以从源代码复制并粘贴到目标:

Dim targetSheet As Worksheet
Set targetSheet = targetBook.Worksheets(1)

我们从来没有需要sourceSheet.Range("B2:AQ5").Copy targetSheet.Range("R2:BG5") .Select任何东西,而且我们也不需要照顾任何.Activate

答案 2 :(得分:0)

替换:

Windows("Book1october18").Activate

具有:

s = LCase(Format(Now, "mmmm")) & Right(Year(Now), 2)
Windows(s).Activate

答案 3 :(得分:0)

尝试一下。

这是对下个月文档的认可,前提是您已经打开了两个文档。

Sub test()
    Dim Wb1 As Workbook, wb2 As Workbook
    Dim Wb As Workbook

    For Each Wb In Workbooks
        If InStr(Wb.Name, "Book1") Then
            Set Wb1 = Wb
        ElseIf InStr(Wb.Name, "Book2") Then
            Set wb2 = Wb
        End If
    Next Wb

    Wb1.Sheets("Sheet1").Range("B2:AQ5").Copy wb2.Sheets("Sheet1").Range("r2")
End Sub