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