我刚开始使用VBA,并且还没有真正理解很多术语,所以请耐心等待。
使用记录宏功能,我有以下宏:
Sub CFData()
'
' CFData Macro
'
'
Sheets("CF Data").Select
Range("J5").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.ClearContents
Range("B5").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Cut
Range("J5").Select
ActiveSheet.Paste
Range("B5").Select
Workbooks.Open Filename:= _
"W:\\Shared\Config&Planning\CF Data.xlsx"
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Windows("Template 2105.xlsx").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("CF Data.xlsx").Activate
Application.CutCopyMode = False
ActiveWindow.Close
End Sub
我正在使用它来复制每天早上自动更新的一系列数据,并将其粘贴到活动工作簿中,该工作簿每天都以新名称保存(例如,今天“模板2105”,“模板2205”明天等)。 记录宏后,在选择窗口时它无法识别不同的文件名。 我知道显然有更好的方式来写这个,但我不知道需要改变什么。
非常感谢
答案 0 :(得分:0)
替换
Windows("Template 2105.xlsx").Activate
与
Windows("Template " & Format(Day(Now()), "00") & Format(Month(Now()), "00") & ".xlsx").Activate
以上将根据今天的日期动态创建字符串。我还建议你看看How to avoid using Select in Excel VBA。
答案 1 :(得分:0)
希望这能帮到你:
使用@dwirony动态命名工作簿方法
(未测试的)
Sub CFData()
' CFData Macro
Dim cf_data As Worksheet
Set cf_data = Sheets("CF Data")
With cf_data
' clear cell contents
.Range(.Range("J5"), .Range("J5").End(xlDown).End(xlToRight)).ClearContents
' cut and paste
.Range(.Range("B5"), .Range("B5").End(xlDown).End(xlToRight)).Cut .Range("J5")
' .Range("B5").Select ' select should be avoided
End With
' open workbook
Workbooks.Open Filename:="W:\\Shared\Config&Planning\CF Data.xlsx"
'copy
Range(Range("A2"), Range("A2").End(xlDown).End(xlToRight)).Copy
Windows("Template " & Format(Day(Now()), "00") & Format(Month(Now()), "00") & ".xlsx").Activate
'paste VALUES only
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'close without saving (FALSE = no save)
Workbooks("CF Data.xlsx").Close False
' clear copy mode
Application.CutCopyMode = False
End Sub