Excel - Vba-rivin lisääminen ja valikoiman jäsenyyden säilyttäminen
Ongelma
Miten VBA: ssa kopioida / lisätä (paikalleen) rivi ja varmistaa, että jos lähdelista leikkaa sarakevalikoiman, uusi rivi olisi myös alueella ja alue kasvaa 1: llä (eli lisätty rivi) .Jos kohdistin on rivillä, joka on alueen yläreunassa, uusi rivi ei tule alueen alueelle eikä alue lisää kokoa yhdellä rivillä.
xlUp ja xlDown eivät tee mitään eroa, eivätkä myöskään jätä niitä pois (mitä Excel sanoo, on parasta tehdä, jos sinulla on leikkaavia sarakekohtia).
Ratkaisu
Teen sen täysin automaattiseksi. Et tarvitse nimeä alueelle. makro "testi" tekee sen. vain syöttö, jonka sinun täytyy laittaa, sinun täytyy kirjoittaa poistettavan rivin numero esim. 2 tai 3 tai 4, kun syöttökenttä tulee esiin. Makro "undo" peruuttaa makron.Tietokanta on näin A1: stä A5: een
1
2
3
4
5
älä tee mitään vain suorita makro "testi" (molemmat makro on kopioitava moduuliin). Anteeksi, siitä on tullut kieroutunut makro. Yritin käyttää "kokoa". jotenkin tai muuten en onnistunut. Ehkäpä joku asiantuntija voi antaa paremman ratkaisun. Mutta tämä ratkaisu toimii. jos haluat, että nimetyt alueet ovat erilaisia, muokkaa tätä lausuntoa makro "testissä", joka sopii sinulle
Alue ("A2: a4") Nimi = "myrange"
Makrot ovat:
Makro 1
Sub-testi ()Dim r As Range, j Kuten Integer, k Integer -arvona, m Integer
purkaa
Alue ("A2: a4") Nimi = "myrange"
Aseta r = alue ("myrange")
m = WorksheetFunction.Count (r)
'MsgBox m
k = InputBox ("kirjoita valitun rivin numero")
Rivit (k) .Select
Aseta r = alue ("myrange")
j = Range ("myrange"). Solut (1, 1)
MsgBox j
Selection.Rows.Insert
Jos valinta.Row = j Sitten
ActiveWorkbook.Names ( "myrange"). Poista
Alue (solut (valinta. Rivi, "A"), r.kuoret (m, 1)) Nimi = "myrange"
Loppu Jos
MsgBox-alue ("myrange")
Lopeta Sub
Makro 2
Peruuta peruutus ()Dim r As Range, c As Range
Aseta r = Alue (alue ("A1"), solut (rivit.Luku, "A"). Loppu (xlUp))
Jokaiselle c: lle r
Jos c = "" Sitten c.EntireRow.Delete
Seuraava c
Lopeta Sub