我必须使用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年都做到这一点)
答案 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