Скопируйте выпадающий список и условное форматирование в новую ячейку с помощью Excel VBA

#excel #vba

#excel #vba

Вопрос:

У меня есть следующее, чтобы скопировать диапазон свободных текстовых полей в другую серию ячеек, которая работает так, как я хочу:

 Public Sub LogEntry()
    'define source range
    Dim SourceRange As Range
    Set SourceRange = ThisWorkbook.Worksheets("Log").Range("C4:J4")

    'find next free cell in destination sheet
    Dim NextFreeCell As Range
    With ThisWorkbook.Worksheets("Log")
        If IsEmpty(.Range("C8").Value) Then
            Set NextFreeCell = .Range("C8")
        Else
            Set NextFreeCell = .Cells(.Rows.Count, "C").End(xlUp).Offset(1)
        End If
    End With
                
    'copy amp; paste
    SourceRange.Copy
    NextFreeCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    NextFreeCell.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    'delete text box
    ThisWorkbook.Save
    Application.Goto Reference:="R4C7:R4C9"
    Application.CutCopyMode = False
    Selection.ClearContents 
End Sub
  

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

Ответ №1:

Если вы скопируете (а не Copy затем PasteSpecial ) ячейку, проверка данных будет скопирована вместе с ней:

введите описание изображения здесь

код:

 Sub KopyKat()
    Dim J4 As Range, K5 As Range
    
    Set J4 = Range("J4")
    Set K5 = Range("K5")
    
    J4.Copy K5
End Sub
  

результат:

введите описание изображения здесь

Комментарии:

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