„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