Excel - Vba beillesztve a sort és tartani a tartományt
![](http://img.brin-designs.com/img/games/386/excel-vba-inserting-row.png)
Probléma
A VBA-ban hogyan tudok másolni / beilleszteni (helyükre) egy sort, és biztosítani kell, hogy ha a forrássor metszeti egy oszloptartományt, akkor az új sor a tartományban legyen, és a tartomány 1-gyel nő (azaz a beillesztett sor) .Ha a kurzor egy sor tetején van, akkor az új sor nem válik a tartományba, és a tartomány nem növeli a méretet egy sorral.
Az xlUp és az xlDown nem tesz különbséget, és nem hagyja el őket (az Excel azt mondja, hogy a legjobb dolog, ha metsző oszlopok vannak).
Megoldás
Teljesen automatikus vagyok. Nem kell neveznie a tartományt. a makró "teszt" ezt teszi. csak a bemenet, amit meg kell adnia, meg kell adnia a törölni kívánt sor számát pl. 2 vagy 3 vagy 4 esetén, amikor a beviteli mező megjelenik. A makró "visszavonása" visszavonja a makrót.Az adatbázis az A1-től az A5-ig terjed
1
2
3
4
5
Ne csináljon semmit, csak futtassa a makro tesztet (mindkét makrót a modulba kell másolni). Sajnálom, hogy ez egy makroszintű makró. Megpróbáltam az "átméretezést" használni. valahogy vagy nem sikerült. Talán néhány szakértő jobb megoldást adhat. De ez a megoldás működik. ha azt szeretné, hogy a nevezett tartomány tartománya más legyen, módosítsa ezt a kijelentést a makró "teszt" -ében, hogy megfeleljen neked
Tartomány ("A2: a4"). Név = "myrange"
A makrók a következők:
Makró 1
Sub teszt ()Dim r As Range, j Mint Integer, k Mint Integer, m Mint Integer
kibont
Tartomány ("A2: a4"). Név = "myrange"
R = tartomány ("myrange") beállítása
m = WorksheetFunction.Count (r)
'MsgBox m
k = InputBox ("írja be a választandó sor számát")
Sorokban (k) lehetőségre.Válassza
R = tartomány ("myrange") beállítása
j = Tartomány ("myrange"). Cellák (1, 1)
'MsgBox j
Selection.Rows.Insert
Ha a Kiválasztás.Row = j Ezután
ActiveWorkbook.Names ( "myrange"). Delete
Tartomány (Cellák (Kiválasztás.Row, "A"), r.Cells (m, 1)) Név = "myrange"
Vége Ha
MsgBox tartomány ("myrange")
Vége vége
Makró 2
Visszavonás ()Dim r mint tartomány, c mint tartomány
Állítsa be az r = Range (tartomány ("A1"), cellák (sorok.számla, "A") beállítást. Vége (xlUp))
Minden c esetén r
Ha c = "" Ezután c.EntireRow.Delete
Következő c
Vége vége