Автоматическое увеличение строк в таблице при занесении данных на другой лист excel.
На Лист1 есть таблица (например, заполнено 10 строк, ячейки А1-А10). Таблица обведена жирной рамкой.
На Лист2 занесены данные, которые и отображены в таблице на Лист1. Требуется, чтобы при занесении записи на Лист2, в таблице на Лист1 добавлялась строка, в нее заносилась соответствующая запись из Лист2 и чтобы новая строка была оформлена так же, как и таблица (т.е. с жирной рамкой) .
Автоматическое увеличение строк в таблице
Сообщений 1 страница 5 из 5
Поделиться12010-11-30 00:45:22
Поделиться22010-12-03 02:55:35
Решение. Версия 1.
Синхронизация данных основана на простых формульных ссылках. Рамка таблицы перерисовывается по событию изменения содержимого ячеек.
Код события изменения ячеек на листе 2:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Range("A1:A40"), Target) Is Nothing Then Dim RowNum As String Dim rng, Crng As Range ' Находим номер последней непустой ячейки в столбце For Each cell In Worksheets("Лист1").Range("A1:A50") If IsEmpty(cell.Value) Or cell = " " Then RowNum = cell.Row - 1 Exit For End If Next Set Crng = Worksheets("Лист1").Range("A1:A99") 'Выделяем непустые ячейки в столбце А Set rng = Worksheets("Лист1").Range("A1:A" + RowNum) 'Убираем все старые рамки Crng.Borders(xlDiagonalDown).LineStyle = xlNone Crng.Borders(xlDiagonalUp).LineStyle = xlNone Crng.Borders(xlEdgeLeft).LineStyle = xlNone Crng.Borders(xlEdgeTop).LineStyle = xlNone Crng.Borders(xlEdgeBottom).LineStyle = xlNone Crng.Borders(xlEdgeRight).LineStyle = xlNone Crng.Borders(xlInsideVertical).LineStyle = xlNone Crng.Borders(xlInsideHorizontal).LineStyle = xlNone 'Обводим жирной рамкой With rng.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With rng.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With rng.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With rng.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With End If End Sub
Формула ячейки на Листе 1:
=ЕСЛИ(ЕПУСТО(Лист2!$A1);" ";Лист2!$A1)
Поделиться32010-12-03 17:53:21
Максим, да, это то, что я имел в виду. Логику понял, но просьба (чувствую, что без Вас долго буду переделывать),
сделать для случая двух столбцов (н-р, страна - столица или что угодно), причем у таблицы есть и все внутренние рамки, а не только внешняя - т.е. все ячейки тоже обведены жирной рамкой.
Поделиться42010-12-03 23:27:37
Вот.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Range("A1:B40"), Target) Is Nothing Then Dim RowNum As String Dim rng, Crng As Range ' Находим номер последней непустой ячейки в столбце For Each cell In Worksheets("Лист1").Range("A1:A50") If (IsEmpty(cell.Value) Or cell = " ") And (IsEmpty(Cells(cell.Row, cell.Column + 1).Value) Or Cells(cell.Row, cell.Column + 1) = " ") Then RowNum = cell.Row - 1 Exit For End If Next Set Crng = Worksheets("Лист1").Range("A1:B99") 'Выделяем непустые ячейки в столбце А Set rng = Worksheets("Лист1").Range("A1:B" + RowNum) 'Убираем все старые рамки Crng.Borders(xlDiagonalDown).LineStyle = xlNone Crng.Borders(xlDiagonalUp).LineStyle = xlNone Crng.Borders(xlEdgeLeft).LineStyle = xlNone Crng.Borders(xlEdgeTop).LineStyle = xlNone Crng.Borders(xlEdgeBottom).LineStyle = xlNone Crng.Borders(xlEdgeRight).LineStyle = xlNone Crng.Borders(xlInsideVertical).LineStyle = xlNone Crng.Borders(xlInsideHorizontal).LineStyle = xlNone 'Обводим жирной рамкой With rng.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With rng.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With rng.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With rng.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With rng.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With rng.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With End If End Sub
Поделиться52010-12-03 23:57:15
Максим, отлично,
работает в 2003 и 2007. Отдельное спасибо за доделку.
Задача решена.