Добрый день!Возможно ли форматирование ячеек с одного листа дублировать на второй, но он другой формы?Формула дублирует значение ячейки,а вот с форматированием проблема. Нашёл что-то подобное,но если для каждой ячейки писать-это будет ужас [vba]
Код
Sub CopyPastInsert() Dim myRange As Range Set myRange = ActiveWorkbook.Sheets("Лист2").Range("A1") 'Set myRange = ActiveWorkbook.Worksheets("Лист2").Range("A1") 'myRange.Activate ActiveWorkbook.Worksheets("Лист2").Range("c10").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove myRange.Copy ' Range("A1").Copy ActiveWorkbook.Worksheets("Лист2").Range("c10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWorkbook.Worksheets("Лист2").Range("c10").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Range("A1").Select End Sub
[/vba]
Добрый день!Возможно ли форматирование ячеек с одного листа дублировать на второй, но он другой формы?Формула дублирует значение ячейки,а вот с форматированием проблема. Нашёл что-то подобное,но если для каждой ячейки писать-это будет ужас [vba]
Код
Sub CopyPastInsert() Dim myRange As Range Set myRange = ActiveWorkbook.Sheets("Лист2").Range("A1") 'Set myRange = ActiveWorkbook.Worksheets("Лист2").Range("A1") 'myRange.Activate ActiveWorkbook.Worksheets("Лист2").Range("c10").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove myRange.Copy ' Range("A1").Copy ActiveWorkbook.Worksheets("Лист2").Range("c10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWorkbook.Worksheets("Лист2").Range("c10").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Range("A1").Select End Sub
Выделите в первом листе диапазон и запустите это: [vba]
Код
Sub tt() With Selection shIn_ = .Parent.Index ad_ = .Address nr_ = .Rows.Count .Copy End With With Sheets(shIn_ + 1) .Select Application.ScreenUpdating = 0 With .Range(ad_) .PasteSpecial Paste:=xlPasteValues .PasteSpecial Paste:=xlPasteFormats For i = nr_ - 1 To 1 Step -1 .Offset(i).Resize(1).EntireRow.Insert Next i .Offset(1, 16).Resize(1, 1).EntireColumn.Insert .Offset(, 17).Resize(nr_ * 2 - 1, 16).Copy .Offset(1, 1).Resize(1, 1).Select End With .PasteSpecial Format:=1, Link:=1, DisplayAsIcon:=True, IconFileName:=False .Range(ad_).Offset(, 17).Resize(nr_ * 2 - 1, 16).Clear Application.ScreenUpdating = 1 End With End Sub
[/vba]
Выделите в первом листе диапазон и запустите это: [vba]
Код
Sub tt() With Selection shIn_ = .Parent.Index ad_ = .Address nr_ = .Rows.Count .Copy End With With Sheets(shIn_ + 1) .Select Application.ScreenUpdating = 0 With .Range(ad_) .PasteSpecial Paste:=xlPasteValues .PasteSpecial Paste:=xlPasteFormats For i = nr_ - 1 To 1 Step -1 .Offset(i).Resize(1).EntireRow.Insert Next i .Offset(1, 16).Resize(1, 1).EntireColumn.Insert .Offset(, 17).Resize(nr_ * 2 - 1, 16).Copy .Offset(1, 1).Resize(1, 1).Select End With .PasteSpecial Format:=1, Link:=1, DisplayAsIcon:=True, IconFileName:=False .Range(ad_).Offset(, 17).Resize(nr_ * 2 - 1, 16).Clear Application.ScreenUpdating = 1 End With End Sub
В книге должно быть по крайней мере 2 листа. Первый - откуда берем, второй - куда кладем. Названия произвольны Макрос вставляет новую таблицу в лист, находящийся справа от того, в котором исходная таблица
В книге должно быть по крайней мере 2 листа. Первый - откуда берем, второй - куда кладем. Названия произвольны Макрос вставляет новую таблицу в лист, находящийся справа от того, в котором исходная таблица_Boroda_
Александр,а возможно как-то без выделения(Листы блокирую от рукожопов и кнопку рибоном вывожу в меню) и копию в указанный диапазон на определенный лист
Александр,а возможно как-то без выделения(Листы блокирую от рукожопов и кнопку рибоном вывожу в меню) и копию в указанный диапазон на определенный листgge29
Возможно. Но тогда нужно четко понимать, что и как расположено на листе-исходнике. Откуда начинается таблица, нет ли у нее пустых строк/столбцов, есть ли на листе еще что-нибудь, если есть, то что и где. Кстати, если блокируете, то как рукожопы заполняют и красят эту таблицу?
Возможно. Но тогда нужно четко понимать, что и как расположено на листе-исходнике. Откуда начинается таблица, нет ли у нее пустых строк/столбцов, есть ли на листе еще что-нибудь, если есть, то что и где. Кстати, если блокируете, то как рукожопы заполняют и красят эту таблицу?_Boroda_
У них только доступ к заполнению части ячеек, перед основным макросом код разблокировки потом работа макроса и снова код закрытия листа. Попробую сделать шаблон для наглядности и выложить
У них только доступ к заполнению части ячеек, перед основным макросом код разблокировки потом работа макроса и снова код закрытия листа. Попробую сделать шаблон для наглядности и выложитьgge29
Александр,добрый день!Пытался под оригинал применить, но диапазон ad_ попадает на объединённые ячейки На пустой лист встаёт чётко! Может как-то по другому возможно дописать его?
Александр,добрый день!Пытался под оригинал применить, но диапазон ad_ попадает на объединённые ячейки На пустой лист встаёт чётко! Может как-то по другому возможно дописать его?gge29
Sub tt() Dim rSource As Range Set rSource = Sheets("ОДНОСТРОЧНЫЙ").Range("H13:AL27") With rSource Dim ad_ As String ad_ = .Address Dim nr_ As Long nr_ = .Rows.Count End With
Dim rTarget As Range Set rTarget = Sheets("СУДОВОЙ").Range(ad_).Cells(1, 1)
Application.ScreenUpdating = False Dim Application_Calculation As XlCalculation: Application_Calculation = Application.Calculation: Application.Calculation = xlCalculationManual
Dim ys As Long, xs As Long, yt As Long, xw As Long For ys = 1 To rSource.Rows.Count xw = 16 + 1 For xs = 1 To rSource.Columns.Count Step 16 yt = yt + 1 xw = xw - 1 rSource.Cells(ys, xs).Resize(1, xw).Copy rTarget(yt, 1).PasteSpecial Paste:=xlPasteValues rTarget(yt, 1).PasteSpecial Paste:=xlPasteFormats Next Next Calculate Application.Calculation = Application_Calculation Application.ScreenUpdating = True End Sub
[/vba]
ВРоде как оно,завтра проверю [vba]
Код
Sub tt() Dim rSource As Range Set rSource = Sheets("ОДНОСТРОЧНЫЙ").Range("H13:AL27") With rSource Dim ad_ As String ad_ = .Address Dim nr_ As Long nr_ = .Rows.Count End With
Dim rTarget As Range Set rTarget = Sheets("СУДОВОЙ").Range(ad_).Cells(1, 1)
Application.ScreenUpdating = False Dim Application_Calculation As XlCalculation: Application_Calculation = Application.Calculation: Application.Calculation = xlCalculationManual
Dim ys As Long, xs As Long, yt As Long, xw As Long For ys = 1 To rSource.Rows.Count xw = 16 + 1 For xs = 1 To rSource.Columns.Count Step 16 yt = yt + 1 xw = xw - 1 rSource.Cells(ys, xs).Resize(1, xw).Copy rTarget(yt, 1).PasteSpecial Paste:=xlPasteValues rTarget(yt, 1).PasteSpecial Paste:=xlPasteFormats Next Next Calculate Application.Calculation = Application_Calculation Application.ScreenUpdating = True End Sub