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