Excel - Vba vstavi vrstico in obdrži obseg članstva
Težava
V VBA, kako kopiram / vstavim (namestim) vrstico in zagotovim, da bo nova vrstica tudi v obsegu in obseg se bo povečal za 1 (tj. Vstavljena vrstica), če bo izvorna vrstica presekala obseg stolpcev. .Če je kazalka na vrstici, ki je na vrhu razpona, nova vrstica ne postane član območja in obseg ne poveča velikosti za eno vrstico.
xlUp in xlDown ne spreminjajo nobenih sprememb, prav tako pa jih ne zapuščajo (kar Excel pravi, da je najboljša stvar, če imate presečna stolpična območja).
Rešitev
Popolnoma avtomatiziram. Ni treba poimenovati območja. makro "test" to počne. samo vnos, ki ga morate dati, morate vnesti številko vrstice, ki jo želite izbrisati, npr. za 2 ali 3 ali 4, ko pride vnosno polje. Makro »razveljavi« razveljavi, kaj makro počne.Podatkovna baza je taka od A1 do A5
1
2
3
4
5
ne delajte ničesar, kar je potrebno, da zaženete makro "test" (oba makroa morata biti kopirana v modulu). Oprostite, da je to postalo zapleten makro. Poskušal sem uporabiti "velikost". nekako nisem uspel. Morda bi lahko nek strokovnjak dal boljšo rešitev. Toda ta rešitev deluje. če želite, da je območje imenovanega območja različno, spremenite to izjavo v makro "test", da vam ustreza
Razpon ("A2: a4"). Ime = "myrange"
Makri so:
Makro 1
Sub test ()Dim r Kot Območje, j Kot Integer, k Kot Integer, m Kot Integer
undo
Razpon ("A2: a4"). Ime = "myrange"
Nastavi r = Razpon ("myrange")
m = WorksheetFunction.Count (r)
"MsgBox m
k = InputBox ("vnesite številko vrstice, ki bo izbrana")
Vrstice (k). Izberite
Nastavi r = Razpon ("myrange")
j = Razpon ("myrange"). Celice (1, 1)
"MsgBox j
Selection.Rows.Insert
Če je Selection.Row = j Potem
ActiveWorkbook.Names ("myrange"). Izbriši
Razpon (Celice (izbor, vrstica, "A"), r.klici (m, 1)) Ime = "myrange"
End If
MsgBox Range ("myrange"). Naslov
End Sub
Makro 2
Sub undo ()Dim r As Range, c As Range
Nastavi r = obseg (obseg ("A1"), celice (vrstice, število, "A"). Konec (xlUp))
Za vsako c v r
Če je c = "" Nato c.EntireRow.Delete
Naprej c
End Sub