将数据从已关闭的工作簿复制到活动工作簿

时间:2018-05-21 14:29:18

标签: excel vba excel-vba copy-paste

我刚开始使用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”明天等)。 记录宏后,在选择窗口时它无法识别不同的文件名。 我知道显然有更好的方式来写这个,但我不知道需要改变什么。

非常感谢

2 个答案:

答案 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