Автоматическое увеличение строк в таблице при занесении данных на другой лист 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. Отдельное спасибо за доделку.
Задача решена.