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

Opomba

Hvala za venkat1926 za ta tip
Prejšnji Članek Naslednji Članek

Top Nasveti