Excel - Vba beillesztve a sort és tartani a tartományt

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

jegyzet

Köszönet venkat1926-nak a tippért
Előző Cikk Következő Cikk

Top Tippek