2013-12-03 4 views
1

Ребята, если я использую следующий код:Как скопировать форматирование ячейки и стиль

dim Defaultcol As Long 

Defaultcol = Sheets("Whatever").Cells(1, 1).Interior.Color 

я могу получить цвет форматирования из ячейки.

Могу ли я написать что-то вроде

dim FullFormat as object (Or dim FullFormat as cellformat) 

set FullFormat = Sheets("Whatever").Cells(1, 1).formats 

и получить все форматы ячейки в одном объекте?

или, может быть,

dim sourcecell as cell 

set sourcecell = Sheets("Whatever").Cells(1, 1) 

и тогда свойство sourcecell.formats, что я мог бы использовать?

Заранее спасибо.

+0

Возможный дубликат http://stackoverflow.com/questions/8451511/vsto-getting-excel-cell-properties-in-bulk – brettdj

ответ

3

Существует способ, чтобы скопировать базовое форматирование ячейки, используя MSND's Guide

В то время как выше, может быть обходным путь, когда дело доходит до VBA нет прямого способа копирования ячеек стилей/форматирования.

Это правда, что Style object хранит стили, но не существуют методы (по крайней мере, я не знаю ни), которые позволяют использовать Style объект скопировать и применить форматирование между ячейками.

Существует обходной путь его с помощью VBA

Один из способов заключается в использовании String аргументы, чтобы скопировать from и to т.е..

Private Sub CopyFormatting(fromRng As String, toRng As String) 
Application.ScreenUpdating = False 
    Dim tmpVal 
    tmpVal = Range(toRng) 
    Range(fromRng).Copy Range(toRng) 
    Range(toRng) = tmpVal 
Application.ScreenUpdating = True 
End Sub 

и Называйте это как

Sub Main() 
    CopyFormatting "A1", "A10" 
End Sub 

и это будет скопировать форматирование и сохранить значение в отличие от большого количества гидов онлайн, которые только скопировать и вставить Клетка


лучший способ было бы передать ссылку на Range объектов, так как это позволит вам использовать его между различными листами и т. д.

Пример

Option Explicit 

Sub Main() 
    Dim rng1 As Range, rng2 As Range 
    Set rng1 = Sheets(1).Range("B3") 
    Set rng2 = Sheets(2).Range("A1") 

    CopyFormatting rng1, rng2 
End Sub 

Private Sub CopyFormatting(fromRng As Range, toRng As Range) 
Application.ScreenUpdating = False 
    Dim tmpVal 
    tmpVal = toRng 
    fromRng.Copy toRng 
    toRng = tmpVal 
Application.ScreenUpdating = True 
End Sub 
+1

Очень приятно! ........... Альтернативой может быть динамическое создание ** стиля ** на основе форматирования исходного диапазона, а затем его доступность для использования позже. –

+1

@ Gary'sStudent Я бы экспортировал стиль как XML - то есть. строка, которая может быть извлечена/импортирована с использованием шаблона для этого. Это огромная тема, чтобы пройти сейчас, но это было бы возможно –

1

Объект, который захватывает или инкапсулирует полное форматирование ячейки, является его Стиль.

См. Справка VBA.

+0

ИТАК, как скопировать стиль из одной ячейки в другую которая является большей частью вопроса :) –

+0

@mehow Если мы заранее знаем, что необходимо применить конкретное форматирование, тогда может быть создан и затем применен ** Стиль **. Если мы не подготовились, мы можем положиться на PasteSpecialFormats. –

+1

Я думаю, что класс 'Style' немного бесполезен (требуется итерация по всем свойствам для правильной копии), что дополнительно требует, чтобы вы переопределили класс, чтобы иметь возможность перебирать все свойства <= много работы), поэтому я предоставил альтернативный способ, который я склонен думать, когда мне приходится копировать форматирование/стиль между ячейками. –

Смежные вопросы