Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA文件名更改_Excel_Vba - Fatal编程技术网

Excel VBA文件名更改

Excel VBA文件名更改,excel,vba,Excel,Vba,我必须使用两本Excel工作簿:book1、ctober和Book2。book1ocober18是一个导入文件,这意味着它每月都会更改,同时还会更改名称(下个月将是book1novenber18)。我必须通过VBA代码将一些数据从Book1目录自动复制到Book2目录 这是我写的代码: Windows("Book1october18").Activate Sheets("Sheet1").Activate Range("B2:AQ5").Select Selection.Copy Windows

我必须使用两本Excel工作簿:book1、ctober和Book2。book1ocober18是一个导入文件,这意味着它每月都会更改,同时还会更改名称(下个月将是book1novenber18)。我必须通过VBA代码将一些数据从Book1目录自动复制到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年都这样做)

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

替换:

Windows("Book1october18").Activate
与:


工作簿的名称/路径并不重要。用于生成文件名,或提示用户输入要打开的路径/文件-将该字符串放入某个
sourceBookPath
变量中,然后让宏打开工作簿。现在,您可以保存对该
工作簿
对象的引用:

Dim sourceBook As Workbook
Set sourceBook = Application.Workbooks.Open(sourceBookPath)
现在是工作表

Dim sourceSheet As Worksheet
如果图纸始终命名为“Sheet1”,则可以执行以下操作:

Set sourceSheet = sourceBook.Worksheets("Sheet1")
Set sourceSheet = sourceBook.Worksheets(1)
或者,如果工作表始终是书中的第一张工作表(无论其名称如何),则可以执行以下操作:

Set sourceSheet = sourceBook.Worksheets("Sheet1")
Set sourceSheet = sourceBook.Worksheets(1)
一旦你有了一个
工作表
对象,你就可以得到你需要的
范围
——但首先你需要你的目标。同样,如果宏打开“book2”,事情会简单得多:

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")
我们一次也不需要
。选择
。激活
任何东西,我们也不需要关心任何
窗口

这是对下个月文档的确认,假设您打开了两个文档

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

您还可以有一个对话框,要求用户选择他们要处理的文件。(
Application.FileDialog(msoFileDialogFilePicker)
)在避免
的问题上有很好的视觉效果。选择