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