Макрос, который вставляется, сохраняя формулы нетронутыми

0

Можно ли как-нибудь скопировать макрос и вставить данные из другого листа на мастер-лист, сохранив формулы на мастер-листе? Поэтому я хочу, чтобы мой макрос вставлял текст только при сохранении форматирования и формул основной таблицы. Я также хочу удалить данные, которые я копирую, из моей ежедневной таблицы после того, как я вставлю ее в мастер. Вот мой макрос до сих пор

Sub macro ()

Workbooks.Open Filename:= _
        ("I:\Master Copy.xlsm"), Password:="nm"

Dim lNewRow As Long
Dim lDataRow As Long

Windows("Master Copy").Activate
ActiveSheet.Unprotect Password = "nm"
    Windows("Daily Worksheet").Activate
    '1. Find last used row in both sheets
    lNewRow = Workbooks("Daily Worksheet").Worksheets("Sheet1").Cells(Worksheets("Sheet1").Rows.Count, "A").End(xlUp).Row
  Windows("Master Copy").Activate
    lDataRow = Workbooks("Master Copy").Worksheets("Submission Log").Cells(Worksheets("Submission Log").Rows.Count, 1).End(xlUp).Row
    lDataRow = lDataRow + 1
    '2. Copy data
    Workbooks("Daily Worksheet").Worksheets("Sheet1").Range("A2:R" & lNewRow).Copy
    '3. Paste data
    Worksheets("Submission Log").Range("A" & lDataRow).PasteSpecial

    Application.CutCopyMode = False
    Selection.ClearContents

  Windows("Master Copy").Activate

ActiveSheet.Protect Password = "nm"


End Sub
Джош У
источник
Если вы копируете и вставляете весь диапазон, и этот диапазон содержит формулы и константы, вы не сможете только вставить константы и не перезаписывать формулы. Вам нужно будет скопировать и вставить только ячейки с константами. Измени свой подход.
Тейлин
Я изменил диапазон, но все еще хочу сохранить форматирование определенных столбцов. У меня есть проверка данных в столбцах, могу ли я вставить и сохранить проверку данных?
Джош W
Вы можете вставить только значения, но они будут применяться ко всему диапазону. Если диапазон содержит формулы, то они будут вставлены как их значения. Проверка и форматирование данных не будут изменены, если вы вставите только значения. Вы также можете вставить только проверку данных или только форматирование. Почему бы вам не взглянуть на документацию? !! Вот для чего это.
Тейлин
спасибо, в итоге я вставил только текст и добавил другой код, чтобы переформатировать вставленный текст. Что такое документация?
Джош W

Ответы:

0

Вы не можете делать то, что вы просите, с помощью одной строки кода.

Я предполагаю, что то, что находится в каждом столбце, в значительной степени совместимо между вашими двумя листами (в противном случае вы бы не пытались копировать весь диапазон с одного листа на другой).

Вот один из способов сделать это:

  1. Скопируйте весь диапазон на лист назначения, как вы сейчас находитесь, но вставьте только текст. Это сохранит форматирование целевого листа, но перезапишет формулы, которые вы хотите сохранить.
  2. На целевом листе скопируйте формулы, которые вы хотите сохранить, из строки выше во вновь вставленную строку. Excel автоматически обновит любые относительные ссылки в формулах. Вы должны будете сделать это для каждой смежной группы ячеек, которые содержат формулы.

Конечно, есть другие способы сделать это, но все они потребуют, чтобы ваш код VBA «знал» ссылки (или как их найти) ячеек, которые должны обрабатываться по-разному. Нет встроенной функции, которая выполняет несколько разных типов копирования, которые вам нужны, в одном диапазоне за одну операцию. У нас есть VBA из-за таких вещей!


Что касается удаления данных из исходного листа, я предполагаю, что вы ищете метод .ClearContents .

Твист имитатор
источник
Я закончил тем, что делал что-то похожее на это. Спасибо
Джош W