Копировать данные из закрытой рабочей книги в активную рабочую книгу - PullRequest
0 голосов
/ 21 мая 2018

Я новичок в использовании 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 голосов
/ 21 мая 2018

Надеюсь, это поможет вам:

Использование метода динамической именованной книги @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
0 голосов
/ 21 мая 2018

Заменить

Windows("Template 2105.xlsx").Activate

на

Windows("Template " & Format(Day(Now()), "00") & Format(Month(Now()), "00") & ".xlsx").Activate

Выше будет динамически создавать строку на основе сегодняшней даты.Я также рекомендую вам посмотреть здесь, чтобы увидеть Как избежать использования Select в Excel VBA .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...