Excel - Vba che inserisce la riga e mantiene l'appartenenza all'intervallo

Problema

In VBA, come faccio a copiare / inserire (in posizione) una riga e assicurarmi che se la riga di origine interseca un intervallo di colonne, che la nuova riga sia compresa nell'intervallo e che l'intervallo aumenti di 1 (ovvero la riga inserita) .

Se il cursore si trova su una riga che si trova nella parte superiore di un intervallo, la nuova riga non diventa un membro dell'intervallo e l'intervallo non aumenta le dimensioni di una riga.

xlUp e xlDown non fanno la differenza, né li lasciano fuori (che Excel dice è la cosa migliore da fare se si hanno intervalli colonnari intersecanti).

Soluzione

Lo sto rendendo completamente automatico. Non è necessario nominare l'intervallo. la macro "test" lo fa. solo l'input che devi inserire è che devi digitare il numero della riga da eliminare per es. 2 o 3 o 4 quando viene visualizzata la casella di input. La macro "annulla" annulla ciò che fa la macro.

Il database è così da A1 a A5

1

2

3

4

5

non fare nulla basta eseguire la macro "test" (entrambe le macro dovrebbero essere copiate nel modulo). Spiacente, questa è diventata una macro contorta. Ho provato a usare "ridimensiona". in un modo o nell'altro non ci sono riuscito. Forse qualche esperto può dare una soluzione migliore. Ma questa soluzione funziona. se si desidera che l'intervallo dell'intervallo denominato sia diverso, modificare questa istruzione nella macro "test" in base alle proprie esigenze

Intervallo ("A2: a4"). Name = "myrange"

Le macro sono:

Macro 1

 Sottotest ()

Dim r As Range, j As Integer, k As Integer, m As Integer

disfare

Intervallo ("A2: a4"). Name = "myrange"

Imposta r = Range ("myrange")

m = WorksheetFunction.Count (r)

'MsgBox m

k = InputBox ("digita il numero della riga da selezionare")

Righe (k) .Select

Imposta r = Range ("myrange")

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

'MsgBox j

Selection.Rows.Insert

Se Selection.Row = j Then

ActiveWorkbook.Names ( "myrange"). Elimina

Intervallo (Celle (Selection.Row, "A"), r.Cells (m, 1)). Name = "myrange"

Finisci se

Intervallo MsgBox ("myrange"). Indirizzo

End Sub

Macro 2

 Sub undo ()

Dim r As Range, c As Range

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

Per ogni c In r

Se c = "" Quindi c.EntireRow.Delete

Successivo c

End Sub

Nota

Grazie a venkat1926 per questo suggerimento
Articolo Precedente Articolo Successivo

I Migliori Consigli