Excel - Vba вставка строки и сохранить членство в диапазоне
вопрос
В VBA, как мне скопировать / вставить (на месте) строку и убедиться, что если исходная строка пересекает диапазон столбцов, то новая строка также будет в этом диапазоне, и диапазон будет увеличиваться на 1 (т.е. вставленная строка),Если курсор находится на строке, которая находится в верхней части диапазона, новая строка не становится членом диапазона, и диапазон не увеличивает размер на одну строку.
xlUp и xlDown не делают различий и не исключают их (что, по словам Excel, лучше всего делать, если у вас есть пересекающиеся столбчатые диапазоны).
Решение
Я делаю это полностью автоматически. Вам не нужно называть диапазон. макрос "тест" делает это. Единственный ввод, который вы должны ввести, - это ввод номера строки, которую нужно удалить, например, 2, 3 или 4, когда появится окно ввода. Макрос «отменяет» отменяет то, что делает макрос.База данных такая от А1 до А5
1
2
3
4
5
ничего не делайте, просто запустите макрос «test» (оба макроса должны быть скопированы в модуль). Извините, это стало запутанным макросом. Я пытался использовать «изменить размер». так или иначе мне не удалось. Возможно, какой-то эксперт может дать лучшее решение. Но это решение работает. если вы хотите, чтобы диапазон именованного диапазона был другим, измените этот оператор в макросе "test", чтобы он вам подходил
Диапазон («A2: a4»). Name = «myrange»
Макросы:
Макрос 1
Суб тест ()Dim r As Range, j As Integer, k As Integer, m As Integer
расстегивать
Диапазон («A2: a4»). Name = «myrange»
Set r = Range ("myrange")
m = WorksheetFunction.Count (r)
MsgBox m
k = InputBox («введите номер выбранной строки»)
Строки (к) .Select
Set r = Range ("myrange")
j = Range ("myrange"). Ячейки (1, 1). Ряд
'MsgBox j
Selection.Rows.Insert
If Selection.Row = j Тогда
ActiveWorkbook.Names ( "MyRange"). Удалить
Range (Ячейки (Selection.Row, "A"), r.Cells (m, 1)). Name = "myrange"
End If
MsgBox Range («myrange»). Адрес
End Sub
Макрос 2
Sub undo ()Dim r As Range, c As Range
Установите r = Range (Range ("A1"), Cells (Rows.Count, "A"). End (xlUp))
Для каждого c In r
Если c = "", то c.EntireRow.Delete
Следующая с
End Sub