„Excel“ - „Vba“ įterpti eilutę ir išlaikyti nuotolį

Problema

VBA programoje kaip kopijuoti / įterpti (įterpti) eilutę ir užtikrinti, kad, jei šaltinio eilutė susikirtų stulpelio diapazoną, naujoji eilutė taip pat būtų diapazone ir diapazonas padidėtų 1 (ty įterpta eilutė) .

Jei žymeklis yra eilėje, kuri yra viršutinėje diapazono dalyje, nauja eilutė netampa diapazono nariu ir diapazonas nepadidina vieno eilutės dydžio.

„xlUp“ ir „xlDown“ nedaro jokio skirtumo, nei palieka juos (tai, ką „Excel“ sako, yra geriausia, jei turite susikertančių stulpelių diapazonus).

Sprendimas

Aš visiškai jį automatiškai. Nereikia nurodyti pavadinimo. makro „testas“ tai daro. tik įvesties, kurią turite įdėti, reikia įvesti ištrinamos eilutės numerį, pvz., 2 arba 3 arba 4, kai atsiranda įvesties laukelis. Makro „anuliuoti“ atšaukia tai, ką daro makro.

Duomenų bazė yra tokia kaip nuo A1 iki A5

1

2

3

4

5

nedarykite nieko tiesiog paleiskite makro „testą“ (abu makrokomandos turėtų būti nukopijuotos į modulį). Apgailestaujame, kad tai tapo spiraliniu makro. Bandžiau naudoti „resize“. kažkaip ar kitaip nepavyko. Galbūt kai kuris ekspertas gali suteikti geresnį sprendimą. Tačiau šis sprendimas veikia. jei norite, kad pavadinimo diapazonas būtų skirtingas, pakeiskite šį teiginį makro „teste“, kad tiktų jums

Diapazonas ("A2: a4") Vardas = "myrange"

Makrokomandos yra:

Makro 1

 Sub bandymas ()

Dim r as Range, j Kaip Integer, k Kaip Integer, m Kaip Integer

atšaukti

Diapazonas ("A2: a4") Vardas = "myrange"

Nustatyti r = intervalas („myrange“)

m = WorksheetFunction.Count (r)

„MsgBox m

k = InputBox ("įveskite pasirinktinos eilės numerį")

Eilutės (k) .Pasirinkite

Nustatyti r = intervalas („myrange“)

j = diapazonas („myrange“), ląstelės (1, 1)

„MsgBox j

Pasirinkimas

Jei atranka

„ActiveWorkbook.Names“ („myrange“)

Diapazonas (ląstelės (atranka. Eilutė, "A"), r.kakliai (m, 1)). Vardas = "myrange"

Baigti Jei

MsgBox diapazonas („myrange“)

Pabaiga

Makro 2

 Pakartotinis atšaukimas ()

Dim r as Range, c as Range

Nustatyti r = intervalas (diapazonas („A1“), ląstelės (eilutės.Skaičiuoti, „A“). Pabaiga (xlUp)

Kiekvienam c r

Jei c = "" Tada c.EntireRow.Delete

Kitas c

Pabaiga

Pastaba

Ačiū venkat1926 už šį patarimą
Ankstesnis Straipsnis Kitas Straipsnis

Geriausi Patarimai