Добрый день! В прикрепленном файле умная таблица. Добавление строк, удаление производится с помощью кнопок над ней. При добавлении новой строки кнопами "добавить" и "добавить строку выше" НЕКОТОРЫЕ ячейки добавленной строки не копируют формат существующих ячеек существующей строки. Например, число выравнивается не по центру, а по левому краю формат даты не "15 янв", как в сущ. строках, а 15.01.2018 и т.д.
Вопрос: как сделать так чтобы формат всегда копировался из предыдущей строки (подразумевается что формат соответствующих ячеек для каждой строки не меняется для всей таблицы)
Добрый день! В прикрепленном файле умная таблица. Добавление строк, удаление производится с помощью кнопок над ней. При добавлении новой строки кнопами "добавить" и "добавить строку выше" НЕКОТОРЫЕ ячейки добавленной строки не копируют формат существующих ячеек существующей строки. Например, число выравнивается не по центру, а по левому краю формат даты не "15 янв", как в сущ. строках, а 15.01.2018 и т.д.
Вопрос: как сделать так чтобы формат всегда копировался из предыдущей строки (подразумевается что формат соответствующих ячеек для каждой строки не меняется для всей таблицы)neonar
Если добавление всё равно идёт кнопками, так сделайте в плюс к добавлению принудительное копирование форматов через PasteSpecial из заведомо существующей строки, второй, например. Типа [vba]
Код
Rows(2).Copy Rows(rw).PasteSpecial xlPasteFormats 'rw — номер новой вставленной строки Application.CutCopyMode = False
[/vba]
Если добавление всё равно идёт кнопками, так сделайте в плюс к добавлению принудительное копирование форматов через PasteSpecial из заведомо существующей строки, второй, например. Типа [vba]
Код
Rows(2).Copy Rows(rw).PasteSpecial xlPasteFormats 'rw — номер новой вставленной строки Application.CutCopyMode = False
StoTisteg , спасибо! Немного поколдовал и заработало!
Но этот способ я так понимаю не связан с умной таблицей, а мы выходим на уровень листа excel.
В принципе он меня устраивает, но может еще кто-то подскажет другой способ. Просто чисто из любопытства.
Прикладываю файл как я встроил Ваши строчки кода в свой, может кому-то пригодится.
Реальная таблица у меня в другом файле, у нее много столбцов что не влезают на экран, удобнее добавлять строки кнопками, чем прокручивать и растягивать.
StoTisteg , спасибо! Немного поколдовал и заработало!
Но этот способ я так понимаю не связан с умной таблицей, а мы выходим на уровень листа excel.
В принципе он меня устраивает, но может еще кто-то подскажет другой способ. Просто чисто из любопытства.
Прикладываю файл как я встроил Ваши строчки кода в свой, может кому-то пригодится.
Реальная таблица у меня в другом файле, у нее много столбцов что не влезают на экран, удобнее добавлять строки кнопками, чем прокручивать и растягивать.neonar
Тогда вот Вам на всякий случай вставка и копирование форматов с привязкой к ListObjects:[vba]
Код
With ActiveSheet.ListObjects(1) .ListRows.Add Position:=rw, alwaysinsert:=True 'rw — относительная позиция ряда: заголовок — 0, первая строка — 1 и т. д. .ListRows(1).Range.Copy .ListRows(rw).Range.PasteSpecial xlPasteFormats Application.CutCopyMode = False End With
Тогда вот Вам на всякий случай вставка и копирование форматов с привязкой к ListObjects:[vba]
Код
With ActiveSheet.ListObjects(1) .ListRows.Add Position:=rw, alwaysinsert:=True 'rw — относительная позиция ряда: заголовок — 0, первая строка — 1 и т. д. .ListRows(1).Range.Copy .ListRows(rw).Range.PasteSpecial xlPasteFormats Application.CutCopyMode = False End With
Sub tt() With ActiveSheet.ListObjects(1) Set d = Intersect(.Range, Selection) If d Is Nothing Then Exit Sub c_ = .Range.Column nc_ = .Range.Columns.Count r_ = d(1).Row End With With Cells(r_, c_).Resize(, nc_) .Copy .Insert Shift:=xlUp .Offset(-1).SpecialCells(xlCellTypeConstants, 23).ClearContents End With End Sub
[/vba]
neonar, пример для добавления выше [vba]
Код
Sub tt() With ActiveSheet.ListObjects(1) Set d = Intersect(.Range, Selection) If d Is Nothing Then Exit Sub c_ = .Range.Column nc_ = .Range.Columns.Count r_ = d(1).Row End With With Cells(r_, c_).Resize(, nc_) .Copy .Insert Shift:=xlUp .Offset(-1).SpecialCells(xlCellTypeConstants, 23).ClearContents End With End Sub
Возникла еще небольшая проблема по поводу добавления строки выше - относительные ссылки начинают сбоить для вычисления формулы. (см. приложенный файл). Количество груш в текущей строке (например, строка 3) вычисляется как сумма предыдущего числа груш (строка 2) + текущее количество яблок (строка 3) Но если вставить выше 3 строки с помощью кнопки ДОБАВИТЬ СТРОКУ ВЫШЕ новую строку, то этот механизм (в теперь уже в 4 строке) после добавления начинает сбоить - формула считает неправильно кол-во груш в 4 строке - относительная ссылка предыдущего числа груш не переезжает в добавленную строку. Как это можно поправить? Заранее благодарю.
Возникла еще небольшая проблема по поводу добавления строки выше - относительные ссылки начинают сбоить для вычисления формулы. (см. приложенный файл). Количество груш в текущей строке (например, строка 3) вычисляется как сумма предыдущего числа груш (строка 2) + текущее количество яблок (строка 3) Но если вставить выше 3 строки с помощью кнопки ДОБАВИТЬ СТРОКУ ВЫШЕ новую строку, то этот механизм (в теперь уже в 4 строке) после добавления начинает сбоить - формула считает неправильно кол-во груш в 4 строке - относительная ссылка предыдущего числа груш не переезжает в добавленную строку. Как это можно поправить? Заранее благодарю.neonar