In VBA, how do I copy/insert (in place) a row and ensure that if the source row intersected a column range, that the new row would also be in the range and the range will grow by 1 (i.e. the inserted row).
If the cursor is on a row that is at the top of a range, the new row does not become a member of the range and the range doesn't increase size by one row.
xlUp and xlDown don't make a difference, nor does leaving them out (which Excel says is the best thing to do if you have intersecting columnar ranges).
I am making it completely automatic. You need not name the range. the macro "test" does it. only input you have to put it is you have to type the number of the row to be deleted for e.g. 2 or 3 or 4 when input box comes up. Macro "undo" undoes what the macro does.
The database is like this from A1 to A5
don't do anything just run the macro "test" (both macro should be copied in the module). Sorry this has become a convoluted macro. I tried to use "resize". somehow or other I did not succeed. Perhaps some expert can give a better solution. But this solution works . if you want the the range of named range is different modify this statement in the macro "test" to suit you
Range("A2:a4").Name = "myrange"
The macros are:
Sub test() Dim r As Range, j As Integer, k As Integer, m As Integer undo Range("A2:a4").Name = "myrange" Set r = Range("myrange") m = WorksheetFunction.Count(r) 'MsgBox m k = InputBox("type the number of the row to be selected") Rows(k).Select Set r = Range("myrange") j = Range("myrange").Cells(1, 1).Row 'MsgBox j Selection.Rows.Insert If Selection.Row = j Then ActiveWorkbook.Names("myrange").Delete Range(Cells(Selection.Row, "A"), r.Cells(m, 1)).Name = "myrange" End If MsgBox Range("myrange").Address End Sub
Sub undo() Dim r As Range, c As Range Set r = Range(Range("A1"), Cells(Rows.Count, "A").End(xlUp)) For Each c In r If c = "" Then c.EntireRow.Delete Next c End Sub