Excel - Vba vkladanie riadkov a udržanie členstva v rozsahu

Problém

V VBA, ako môžem skopírovať / vložiť (na mieste) riadok a zabezpečiť, aby v prípade, že riadok zdroja pretína rozsah stĺpcov, aby nový riadok bol tiež v rozsahu a rozsah bude narastať o 1 (tj vložený riadok),

Ak je kurzor na riadku, ktorý je v hornej časti rozsahu, nový riadok sa nestane členom rozsahu a rozsah nezvýši veľkosť o jeden riadok.

xlUp a xlDown nerobia rozdiel, ani ich nenechávajú von (čo Excel hovorí, že je najlepšia vec, ak máte pretínajúce sa stĺpcové rozsahy).

Riešenie

Robím to úplne automaticky. Nemusíte pomenovať rozsah. makro "test" to robí. len vstup, ktorý musíte zadať, musíte zadať číslo riadka, ktorý sa má vymazať, napr. 2 alebo 3 alebo 4, keď sa objaví vstupné pole. Makro "vrátiť sa späť" zruší to, čo robí makro.

Databáza je podobná databáze A1 až A5

1

2

3

4

5

nerobiť nič len spustiť makro "test" (obe makro by malo byť skopírované v module). Prepáčte, že sa to stalo spletitým makrom. Snažil som sa použiť "veľkosť". nejako alebo inak som neuspel. Možno niektorí odborníci môžu poskytnúť lepšie riešenie. Ale toto riešenie funguje. ak chcete rozsah pomenovaného rozsahu je iný zmeniť toto vyhlásenie v makre "test", aby vám vyhovoval

Rozsah ("A2: a4") Name = "myrange"

Makrá sú:

Makro 1

 Subtest ()

Dim r ako rozsah, j ako celé číslo, k ako celé číslo, m ako celé číslo

Vrátenie späť

Rozsah ("A2: a4") Name = "myrange"

Nastaviť r = rozsah („myrange“)

m = WorksheetFunction.Count (r)

MsgBox m

k = InputBox ("zadajte číslo riadka, ktorý sa má vybrať")

Riadky (k) .Select

Nastaviť r = rozsah („myrange“)

j = Rozsah ("myrange") Bunky (1, 1) .Row

MsgBox j

Selection.Rows.Insert

Ak Selection.Row = j Potom

ActiveWorkbook.Names ( "myrange"). Delete

Rozsah (Bunky (Selection.Row, "A"), r.Cells (m, 1)) Name = "myrange"

Koniec Ak

Rozsah MsgBox ("myrange")

End Sub

Makro 2

 Sub undo ()

Dim r ako rozsah, c ako rozsah

Set r = Range (Range ("A1"), Cells (Rows.Count, "A"). Koniec (xlUp))

Pre každé c In r

Ak c = "" Potom c.EntireRow.Delete

Ďalej c

End Sub

Poznámka

Ďakujeme venkat1926 za tento tip
Predchádzajúci Článok Nasledujúci Článok

Najlepšie Tipy