Excel - Vba indsætter række og holder rækkevidde medlemskab

Problem

I VBA, hvordan kopierer / indsætter jeg (på plads) en række og sørger for, at hvis kildestykket krydsede et kolonneområde, så vil den nye række ligeledes ligge inden for rækkevidden, og intervallet vil vokse med 1 (dvs. den indsatte række) .

Hvis markøren er på en række, der ligger øverst i en rækkevidde, bliver den nye række ikke medlem af området, og rækkevidden øges ikke med en række.

xlUp og xlDown gør ikke forskel, og efterlader dem heller ikke (hvilket Excel siger er det bedste, hvis du har krydsende kolonneområder).

Opløsning

Jeg gør det helt automatisk. Du behøver ikke navngive rækkevidden. makroen "test" gør det. kun input du skal sige det er du er nødt til at skrive nummeret på rækken, der skal slettes for f.eks. 2 eller 3 eller 4, når input box kommer op. Makro "Fortryd" fortryder hvad makroen gør.

Databasen er som denne fra A1 til A5

1

2

3

4

5

ikke gør noget bare kør makroen "test" (begge makro skal kopieres i modulet). Beklager, det er blevet en forvandlet makro. Jeg forsøgte at bruge "resize". på en eller anden måde lykkedes det mig ikke. Måske kan nogle eksperter give en bedre løsning. Men denne løsning virker. hvis du ønsker at rækkevidden af ​​navngivne interval er anderledes, ændrer du denne erklæring i makro "test" for at passe dig

Område ("A2: a4"). Navn = "myrange"

Makroerne er:

Makro 1

 Subtest ()

Dim r Som rækkevidde, j Som helhed, k Som helhed, m Som helhed

fortryde

Område ("A2: a4"). Navn = "myrange"

Indstil r = Range ("myrange")

m = Arbejdsarksfunktion.Count (r)

'MsgBox m

k = InputBox ("indtast nummeret på den række, der skal vælges")

Rækker (k) .Select

Indstil r = Range ("myrange")

j = Range ("myrange"). Celler (1, 1) .Row

'MsgBox j

Selection.Rows.Insert

Hvis Selection.Row = j Så

ActiveWorkbook.Names ( "myrange"). Slet

Range (Celler (Selection.Row, "A"), r. Cells (m, 1)). Navn = "myrange"

Afslut Hvis

MsgBox Range ("myrange"). Adresse

Slutdel

Makro 2

 Sub undo ()

Dim r Som Range, c Som Range

Indstil r = Range (Range ("A1"), Celler (Rows.Count, "A"). Slut (xlUp))

For hver c In r

Hvis c = "" Så c.EntireRow.Delete

Næste c

Slutdel

Bemærk

Tak til venkat1926 for dette tip
Forrige Artikel Næste Artikel

Top Tips