Vba excel копировать форматирование

Remember that when you write:

MyArray = Range("A1:A5000")

you are really writing

MyArray = Range("A1:A5000").Value

You can also use names:

MyArray = Names("MyWSTable").RefersToRange.Value

But Value is not the only property of Range. I have used:

MyArray = Range("A1:A5000").NumberFormat

I doubt

MyArray = Range("A1:A5000").Font

would work but I would expect

MyArray = Range("A1:A5000").Font.Bold

to work.

I do not know what formats you want to copy so you will have to try.

However, I must add that when you copy and paste a large range, it is not as much slower than doing it via an array as we all thought.

Post Edit information

Having posted the above I tried by own advice. My experiments with copying Font.Color and Font.Bold to an array have failed.

Of the following statements, the second would fail with a type mismatch:

  ValueArray = .Range("A1:T5000").Value
  ColourArray = .Range("A1:T5000").Font.Color

ValueArray must be of type variant. I tried both variant and long for ColourArray without success.

I filled ColourArray with values and tried the following statement:

  .Range("A1:T5000").Font.Color = ColourArray

The entire range would be coloured according to the first element of ColourArray and then Excel looped consuming about 45% of the processor time until I terminated it with the Task Manager.

There is a time penalty associated with switching between worksheets but recent questions about macro duration have caused everyone to review our belief that working via arrays was substantially quicker.

I constructed an experiment that broadly reflects your requirement. I filled worksheet Time1 with 5000 rows of 20 cells which were selectively formatted as: bold, italic, underline, subscript, bordered, red, green, blue, brown, yellow and gray-80%.

With version 1, I copied every 7th cells from worksheet «Time1» to worksheet «Time2» using copy.

With version 2, I copied every 7th cells from worksheet «Time1» to worksheet «Time2» by copying the value and the colour via an array.

With version 3, I copied every 7th cells from worksheet «Time1» to worksheet «Time2» by copying the formula and the colour via an array.

Version 1 took an average of 12.43 seconds, version 2 took an average of 1.47 seconds while version 3 took an average of 1.83 seconds. Version 1 copied formulae and all formatting, version 2 copied values and colour while version 3 copied formulae and colour. With versions 1 and 2 you could add bold and italic, say, and still have some time in hand. However, I am not sure it would be worth the bother given that copying 21,300 values only takes 12 seconds.

** Code for Version 1**

I do not think this code includes anything that needs an explanation. Respond with a comment if I am wrong and I will fix.

Sub SelectionCopyAndPaste()

  Dim ColDestCrnt As Integer
  Dim ColSrcCrnt As Integer
  Dim NumSelect As Long
  Dim RowDestCrnt As Integer
  Dim RowSrcCrnt As Integer
  Dim StartTime As Single

  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  NumSelect = 1
  ColDestCrnt = 1
  RowDestCrnt = 1
  With Sheets("Time2")
    .Range("A1:T715").EntireRow.Delete
  End With
  StartTime = Timer
  Do While True
    ColSrcCrnt = (NumSelect Mod 20) + 1
    RowSrcCrnt = (NumSelect - ColSrcCrnt) / 20 + 1
    If RowSrcCrnt > 5000 Then
      Exit Do
    End If
    Sheets("Time1").Cells(RowSrcCrnt, ColSrcCrnt).Copy _
                 Destination:=Sheets("Time2").Cells(RowDestCrnt, ColDestCrnt)
    If ColDestCrnt = 20 Then
      ColDestCrnt = 1
      RowDestCrnt = RowDestCrnt + 1
    Else
     ColDestCrnt = ColDestCrnt + 1
    End If
    NumSelect = NumSelect + 7
  Loop
  Debug.Print Timer - StartTime
  ' Average 12.43 secs
  Application.Calculation = xlCalculationAutomatic

End Sub

** Code for Versions 2 and 3**

The User type definition must be placed before any subroutine in the module. The code works through the source worksheet copying values or formulae and colours to the next element of the array. Once selection has been completed, it copies the collected information to the destination worksheet. This avoids switching between worksheets more than is essential.

Type ValueDtl
  Value As String
  Colour As Long
End Type

Sub SelectionViaArray()

  Dim ColDestCrnt As Integer
  Dim ColSrcCrnt As Integer
  Dim InxVLCrnt As Integer
  Dim InxVLCrntMax As Integer
  Dim NumSelect As Long
  Dim RowDestCrnt As Integer
  Dim RowSrcCrnt As Integer
  Dim StartTime As Single
  Dim ValueList() As ValueDtl

  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual

  ' I have sized the array to more than I expect to require because ReDim
  ' Preserve is expensive.  However, I will resize if I fill the array.
  ' For my experiment I know exactly how many elements I need but that
  ' might not be true for you.
  ReDim ValueList(1 To 25000)

  NumSelect = 1
  ColDestCrnt = 1
  RowDestCrnt = 1
  InxVLCrntMax = 0      ' Last used element in ValueList.
  With Sheets("Time2")
    .Range("A1:T715").EntireRow.Delete
  End With
  StartTime = Timer
  With Sheets("Time1")
    Do While True
      ColSrcCrnt = (NumSelect Mod 20) + 1
      RowSrcCrnt = (NumSelect - ColSrcCrnt) / 20 + 1
      If RowSrcCrnt > 5000 Then
        Exit Do
      End If
      InxVLCrntMax = InxVLCrntMax + 1
      If InxVLCrntMax > UBound(ValueList) Then
        ' Resize array if it has been filled 
        ReDim Preserve ValueList(1 To UBound(ValueList) + 1000)
      End If
      With .Cells(RowSrcCrnt, ColSrcCrnt)
        ValueList(InxVLCrntMax).Value = .Value              ' Version 2
        ValueList(InxVLCrntMax).Value = .Formula            ' Version 3
        ValueList(InxVLCrntMax).Colour = .Font.Color
      End With
      NumSelect = NumSelect + 7
    Loop
  End With
  With Sheets("Time2")
    For InxVLCrnt = 1 To InxVLCrntMax
      With .Cells(RowDestCrnt, ColDestCrnt)
        .Value = ValueList(InxVLCrnt).Value                 ' Version 2
        .Formula = ValueList(InxVLCrnt).Value               ' Version 3
        .Font.Color = ValueList(InxVLCrnt).Colour
      End With
      If ColDestCrnt = 20 Then
        ColDestCrnt = 1
        RowDestCrnt = RowDestCrnt + 1
      Else
       ColDestCrnt = ColDestCrnt + 1
      End If
    Next
  End With
  Debug.Print Timer - StartTime
  ' Version 2 average 1.47 secs
  ' Version 3 average 1.83 secs
  Application.Calculation = xlCalculationAutomatic

End Sub

Если вы хотите скопировать только форматирование ячейки из диапазона, как это сделать быстро? В этом руководстве представлены быстрые сокращения, позволяющие легко копировать только форматирование.

Копирование форматирования только с помощью Format Painter в Excel

Копировать форматирование только с помощью VBA

Копировать форматирование только с Kutools for Excel хорошая идея3


Копирование форматирования только с помощью Format Painter в Excel

В Excel вы можете копировать форматирование ячеек только с помощью Формат Painter инструмент.

1. Выберите диапазон, содержащий формат ячеек, который вы хотите скопировать. Смотрите скриншот:

2. Применение Формат Painter щелкнув его под Главная вкладку, см. снимок экрана:

3. Выберите пустую ячейку и щелкните по ней, будет вставлено только форматирование ячеек. Смотрите скриншот:

Внимание: Формат Painter также можно копировать форматирование только на другой лист.


Копировать форматирование только с помощью VBA

Следующие макросы также могут помочь вам скопировать только форматирование ячеек.

1. Держать ALT и нажмите F11 на клавиатуре, чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модули, и скопируйте VBA в модуль.

VBA: копировать только форматирование ячеек:

Sub CopyFormat()
'Update 20130815
Dim CopyRng As Range, PasteRng As Range
xTitleId = "KutoolsforExcel"
Set CopyRng = Application.Selection
Set CopyRng = Application.InputBox("Ranges to be copied :", xTitleId, CopyRng.Address, Type:=8)
Set PasteRng = Application.InputBox("Paste to (single cell):", xTitleId, Type:=8)
CopyRng.Copy
PasteRng.Parent.Activate
PasteRng.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End Sub

3. Нажмите Run или нажмите F5 для запуска VBA. На экране отображается диалоговое окно, и вы должны выбрать ячейки, форматирование которых вы хотите скопировать. Смотрите скриншот:

4. Нажмите Ok и другое диалоговое окно отображается для вас, чтобы выбрать ячейку для вставки форматирования. Смотрите скриншот:

6. Нажмите Ok, то форматирование ячеек вставляется в выбранную ячейку. Смотрите скриншот:

 Внимание: С помощью этого кода VBA вы можете вставлять только форматирование в другие рабочие листы, которые вы хотите.


Копировать форматирование только с Kutools for Excel

Есть Kutools for Excel установлен, Копировать диапазоны Функция может помочь вам быстро и легко скопировать только форматирование ячеек.

После установки Kutools for Excel, пожалуйста, сделайте, как показано ниже :( Бесплатная загрузка Kutools for Excel Сейчас!)

Пожалуйста, примените Копировать диапазоны функция, нажав Кутулс > Копировать диапазоны. Смотрите скриншот:

только документ копировать форматирование 9

1. Выделите ячейки, форматирование которых вы хотите скопировать.

2. Нажмите Кутулс > Копировать диапазонs, на экране появится диалог, отметьте Форматы вариант под Специальная вставка, см. снимок экрана:

3. И нажмите ОК. Другой диалог отображается для вас, чтобы выбрать ячейку для вставки результата. Смотрите скриншот:

4. Нажмите Ok, и в выбранную ячейку вставляется только форматирование. Смотрите скриншот:

Внимание: Вы также можете копировать и вставлять форматирование ячеек между двумя электронными таблицами. Если вы хотите скопировать высоту строки и ширину столбца, вы можете проверить Включая высоту строки и Включая ширину столбца коробка в Копировать несколько диапазонов Диалог.

Работы С Нами Kutools for ExcelКопировать диапазоны, вы также можете копировать только значения, формулы или комментарии.

Наконечник.Если вы хотите подсчитать или суммировать ячейки на основе цветов, попробуйте использовать Kutools for ExcelАвтора Считать по цвету как показано на следующем снимке экрана. Полная функция без ограничений в 30 дней, пожалуйста, скачайте и получите бесплатную пробную версию сейчас.

Считать по цвету

В некоторых случаях у вас может быть диапазон значений с несколькими цветами, и вы хотите подсчитывать / суммировать значения на основе одного и того же цвета, как вы можете быстро рассчитать?
Работы С Нами Kutools for Excel‘s Считать по цвету, вы можете быстро выполнить множество вычислений по цвету, а также можете сформировать отчет о рассчитанном результате.

количество документов по цвету


Относительные статьи:

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

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Using VBA, I’m copying the value of one cell to another:

Dim s As Range
Dim d As Range
Set s = Range("A1")
Set d = Range("B2")
d.Value = s.Value

This works fine, but if the source contains rich text formatting, the formatting is lost.

I could copy the entire cell, formats and all:

s.Copy d

But this brings along not just rich text formatting, but also global formats on the cell — background color, borders, etc. I’m only interested in copying formats that apply to portions of the text (for example, one word in a sentence being in bold).

I’ve also tried copying the format of each character:

For ci = 1 to Len(sourcevalue)
   d.Characters(ci, 1).Font.Bold = s.Characters(ci, 1).Font.Bold
Next

The actual code for the above includes italics, underlines, etc., and caches Characters() as an object for speed, but still, the performance is way too slow for production use.

The last option I can think of is to copy the cell with formatting, then undo any changes to background color or pattern, borders, font name/size, etc.:

bg = d.Interior.ColorIndex
s.Copy d
d.Interior.ColorIndex = bg

This still seems kludgy, it’s difficult to save off all of the formats to be re-applied, and I can’t «undo» formatting like bold, italics, etc. that could either be applied at a cell or character level without erasing the character-level settings.

Any other options out there? The formatting in the Excel OpenOfficeXML file is stored with ranges of characters, but it doesn’t appear these formatted ranges are available via the API, at least as far as I can find.

Edit: Using KazJaw’s approach below, I was able to get what I needed with the following code:

Dim TmpFormat As Range
Set TmpFormat = Range("$XFD$1")
Dest.Copy
TmpFormat.PasteSpecial xlPasteFormats
Source.Copy
Dest.PasteSpecial xlPasteAll
TmpFormat.Copy
Dest.PasteSpecial xlPasteFormats
Dest.Font.Name = TmpFormat.Font.Name
Dest.Font.Size = TmpFormat.Font.Size
TmpFormat.ClearFormats

This temporarily preserves the cell formatting of my destination cell in the last cell of the first row, copies the source with all formatting, pastes back the formatting in the temp cell, and finally also copies back the preserved overall font and size (which in my case I don’t want to copy over from the source). Finally, the temp cell is cleared so it doesn’t impact the worksheet dimensions.

It’s an imperfect solution, especially since it relies on the clipboard, but the performance is good and it does what it needs to do.

.Tima

5 / 5 / 0

Регистрация: 21.09.2012

Сообщений: 37

1

Скопировать содержимое ячейки с форматированием

03.03.2014, 13:10. Показов 8196. Ответов 9

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Как скопировать содержимое ячейки с форматированием на visual basic в excel?
Операция

Visual Basic
1
myS.Range(Ch & i) = mySE.Range(Ch & j)

или

Visual Basic
1
myS.Range(Ch & i).copy mySE.Range(Ch & j)

копирует только содержимое без форматирования.



0



Апострофф

Заблокирован

03.03.2014, 13:19

2

Цитата
Сообщение от .Tima
Посмотреть сообщение

Visual Basic
1
myS.Range(Ch & i).copy mySE.Range(Ch & j)

копирует с форматированием



1



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

03.03.2014, 13:19

3

Лучший ответ Сообщение было отмечено .Tima как решение

Решение

Второе как раз с форматированием, кроме ширины столбца и высоты строки. i -> j. А первое j -> i, может в этом загвоздка.



1



mc-black

2784 / 716 / 106

Регистрация: 04.02.2011

Сообщений: 1,443

03.03.2014, 13:25

4

Второй вариант копирует и вставляет с форматированием. Если в диапазоне только одна ячейка, адресовать её удобней так:

Visual Basic
1
myS.Cells(srcRow, srcColumn).Copy mySE.Cells(dstRow, dstColumn)

где srcRow, dstRow — номер строки для ячейки, а srcColumn, dstColumn — номер столбца (в режиме показа ссылок R1C1).

P.S. С ответом опоздал



1



5 / 5 / 0

Регистрация: 21.09.2012

Сообщений: 37

03.03.2014, 14:12

 [ТС]

5

Цитата
Сообщение от Казанский
Посмотреть сообщение

Второе как раз с форматированием, кроме ширины столбца и высоты строки. i -> j. А первое j -> i, может в этом загвоздка.

Так и было, спасибо всем за помощь!

Цитата
Сообщение от mc-black
Посмотреть сообщение

Если в диапазоне только одна ячейка, адресовать её удобней так:

У меня адрес ячейки формируется из буквы и цифры, и как я понял, в данном случае можно лишь так:
myS.Range(Ch & i)
или можно иняче?



0



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

03.03.2014, 15:07

6

Visual Basic
1
myS.Cells(i, Ch).Copy mySE.Cells(j, Ch)



1



5 / 5 / 0

Регистрация: 21.09.2012

Сообщений: 37

07.03.2014, 00:29

 [ТС]

7

Код

myS.Range(Ch & i).copy mySE.Range(Ch & j)

Копирует содержимое ячейки «формулой», а нужно «значением». Как быть?



0



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

07.03.2014, 12:38

8

Visual Basic
1
 mySE.Range(Ch & j)=myS.Range(Ch & i)



1



5 / 5 / 0

Регистрация: 21.09.2012

Сообщений: 37

07.03.2014, 13:09

 [ТС]

9

Цитата
Сообщение от KoGG
Посмотреть сообщение

mySE.Range(Ch & j)=myS.Range(Ch & i)

Логично, но тогда не копируется форматирование.

Как я понимаю, для того, чтобы скопировать содержимое «значением» с форматированием нужно выполнить две операции:

Код

myS.Range(Ch & i).copy mySE.Range(Ch & j)
mySE.Range(Ch & j)=myS.Range(Ch & i)

Мысль в верном направлении?



0



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

07.03.2014, 20:30

10

Можно так, либо эдак:

Visual Basic
1
2
myS.Range(Ch & i).Copy
mySE.Range(Ch & j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False



2



Как скопировать с листа на лист с сохранением форматирования

qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Как скопировать с листа на лист с сохранением форматирования

Есть ячейка с адресом Sheets(Лист1).Range(«A1»).Select. В другом листе есть другая ячейка с адресом Sheets(Лист2).Range(«A3»).Select.
Требуется скопировать первую ячейку с её содержимым в адрес второй ячейки с полным сохранением форматирования первой — теми же шрифтами, цветами, выравниваниями и т.п. Но при этом не прыгать с листа на лист, вызывая мелькание на экране (ячеек много), а так же скрытно, как если бы из ячейки в ячейку копировались только данные. То есть визуально оставаясь на одном листе.
Клевал я эту Range, клевал — ничего не выходит. :(
И еще. Есть такая штука — ActiveCell.Characters(Start:=i, Length:=j).Insert(x) = x, которая позволяет вставлять (заменять) фрагменты строки с сохранением форматирования оной. Но работает она, как видно из названия, только с активной ячейкой. А как аналогично работать с неактивной?
Кто знает — пожалуйста, подскажите.

Пятачок Forever! :)


Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону
  • ICQ

Re: Как скопировать с листа на лист с сохранением форматирования

Сообщение Alec » 09.06.2010 (Ср) 23:32

qwertyhp писал(а):Есть ячейка с адресом Sheets(Лист1).Range(«A1»).Select

Э, а что, по-твоему, такое Select, как слово иностранного языка, и как элемент используемого языка программирования?
И вообще, что означает каждая часть этого «адреса» (в котором, возможно, не хватает пару кавычек)?

qwertyhp писал(а):Клевал я эту Range, клевал — ничего не выходит.

Интересно, каким это образом?
PS. Excel, кстати, содержит неплохую справку по VBA…

Иногда лучше вовремя остановиться…
И начать заново!


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Как скопировать с листа на лист с сохранением форматирования

Сообщение qwertyhp » 09.06.2010 (Ср) 23:58

Согласен. Следовало написать «На листе MS Excel с именем «Лист1» есть ячейка с адресом «A1″», и далее — в том же духе. Написал короче и интуитивно понятнее (наверное). А Select — это по-заумному, по-иноземному. Клевал по-разному, не выходит. Помогите, кто знает.

Пятачок Forever! :)


Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону
  • ICQ

Re: Как скопировать с листа на лист с сохранением форматирования

Сообщение Alec » 10.06.2010 (Чт) 0:33

Иногда лучше вовремя остановиться…
И начать заново!


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Как скопировать с листа на лист с сохранением форматирования

Сообщение qwertyhp » 10.06.2010 (Чт) 1:29

Сообщение удалено как потерявшее актуальность.

Последний раз редактировалось qwertyhp 10.06.2010 (Чт) 1:50, всего редактировалось 1 раз.

Пятачок Forever! :)


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Как скопировать с листа на лист с сохранением форматирования

Сообщение qwertyhp » 10.06.2010 (Чт) 1:46

Нашёл. Проблема решена.
Была ячейка, в которой текст набран РАЗЛИЧНЫМИ шрифтами *цветом, и т.п. — буквально винегрет из размеров, выделений и т.д. — и мне всё это нужно было без потерь и визуальной смены листа скопировать на другой лист.
Привожу код, вдруг кому пригодится:

Код: Выделить всё
Sub КопированиеЯчейки()
' Копирование ячейки "как есть", один-в-один :
    Sheets("Лист1").Range("A2").Copy
    Sheets("Лист2").Range("A8").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False
End Sub

Alec, спасибо за совет обратиться к Справке. Помогло. Пошёл шКодить дальше))))).

Последний раз редактировалось qwertyhp 10.06.2010 (Чт) 1:54, всего редактировалось 1 раз.

Пятачок Forever! :)


Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону
  • ICQ

Re: Как скопировать с листа на лист с сохранением форматирования

Сообщение Alec » 10.06.2010 (Чт) 1:54

qwertyhp писал(а):Требуется скопировать первую ячейку с её содержимым в адрес второй ячейки с полным сохранением форматирования первой — теми же шрифтами, цветами, выравниваниями и т.п.

qwertyhp писал(а):Сам я нашел решение

Запись макросов + избавление от выделения ячеек. Только, когда ты то же самое делаешь без макросов, ты тоже во второй ячейке заново набираешь текст, а потом делаешь специальную вставку? Или просто — скопировать/вставить?

Код: Выделить всё
    Sheets("Лист1").Range("A2").Copy
    Sheets("Лист2").Paste Range("A8")
    Application.CutCopyMode = False

Добавлено позже.
Первоначально это был ответ на твой стертый пост…

Иногда лучше вовремя остановиться…
И начать заново!


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Как скопировать с листа на лист с сохранением форматирования

Сообщение qwertyhp » 10.06.2010 (Чт) 2:06

Всё равно спасибо. Только поправка — Sheets(«Лист2»).Paste Range(«A8») в Вашем коде вставляет в активный лист, не в указанный.

Пятачок Forever! :)


Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону
  • ICQ

Re: Как скопировать с листа на лист с сохранением форматирования

Сообщение Alec » 10.06.2010 (Чт) 2:09

Однако… Точно!

Код: Выделить всё
    ActiveSheet.Paste Sheets("Лист2").Range("A8")

Иногда лучше вовремя остановиться…
И начать заново!


Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону
  • ICQ

Re: Как скопировать с листа на лист с сохранением форматирования

Сообщение Alec » 11.06.2010 (Пт) 1:24

Оказывается, можно и одной строчкой:

Код: Выделить всё
Sheets("Лист1").Range("A2").Copy Sheets("Лист2").Range("A8")

Иногда лучше вовремя остановиться…
И начать заново!


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Как скопировать с листа на лист с сохранением форматирования

Сообщение qwertyhp » 11.06.2010 (Пт) 16:57

Отличное решение! Элегантное и компактное! Спасибо!

Пятачок Forever! :)



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 2

Понравилась статья? Поделить с друзьями:
  • Vba excel копировать формат ячеек
  • Vba excel копировать таблицу
  • Vba excel копировать строки
  • Vba excel копировать значение диапазона
  • Vba excel координаты активной ячейки