Condividi tramite

Eliminare un range in un intervallo tramite un indice

Anonimo
2015-06-22T08:59:32+00:00

Buon giorno.

Ho fatto diverse ricerche con i relativi tentativi ma senza successo.

Ho la necessità di eliminare, con il VBA, una porzione di riga all'interno di un intervallo.

Ho scritto il seguente blocco di codici:

'Eliminazione di un titolo

Private Sub CommandButton5_Click()

Dim Titoli As Range

'Individua il nome da eliminare

If ComboBox1.ListIndex <> -1 Then

Cells(2, 2) = ComboBox1.Text

End If

'a questo punto dovrei individuare la cella dell'intervallo Titoli che contiene il valore scritto nella Cells(2, 2) ed eliminarla insieme alle altre 5 adiacenti verso destra.

End Sub

Grazie per la risposta

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

3 risposte

Ordina per: Più utili
  1. Anonimo
    2015-06-24T13:08:38+00:00

    Grazie per le sollecite risposte.

    Anche se poi prendo altre strade, la visione delle Vostre forniscono interessanti spunti di riflessione ed indirizzo.

    La risposta di Mauro Gamberini, se non ricordo male, l'avevo già visionata guardando le sue risposte ad altri utenti, con il file scaricabile, archiviate in raccolte annuali, mentre la risposta di Maurizio Borrelli l'ho testata ma non permette l'eliminazione della cella di riferimento, nel mio caso la D1.

    Ho risolto nel seguente modo:

    'Eliminazione di una radice del titolo

    Private Sub CommandButton5_Click()

    Dim Messaggio As String

    Dim X As String

    Dim c

    Dim firstAddress

    Messaggio = MsgBox("SEI SICURO DI VOLER ELIMINARE IL TITOLO?", vbYesNo)

    If Messaggio = vbYes Then

    'Individua il nome da eliminare

    If ComboBox1.ListIndex <> -1 Then

    Cells(3, 2) = ComboBox1.Text

    End If

    'Cerca, nella sola colonna D, il nome

    With Worksheets("Pannello").Range("D1", Range("D1").End(xlDown))

        X = Cells(3, 2).Value

        Set c = .Find(X, LookIn:=xlValues, LookAt:=xlWhole)

        If Not c Is Nothing Then

            firstAddress = c.Address

            Do

                c.Cells.Select

                Set c = .FindNext(c)

                If c.Offset(0, 6) = 0 Then

                'Controlla che il nome non sia utilizzato da altre

                'tabelle, Cella J = 0

                c.Resize(Columnsize:=7).Delete Shift:=xlUp

                'Elimina il nome individuato, le 4 celle della nota e

                'la cella del controllo

                Else

                End If

                If c.Offset(0, 6) = 1 Then

                Messaggio = MsgBox("Operazione non riuscita perché il titolo è collegata")

                Else

                End If

            Exit Do

            Loop

        End If

    End With

    End If

    ComboBox1.Clear

    ComboBox1.ListIndex = -1

    Titoli

    'Popola la ComboBox

    End Sub

    PS I controlli di fattibilità dell'operazione li faccio inserendo dei valori 0 o 1 oppure qualsiasi altra forma uno voglia fare, sul foglio, NB con la forma numerica mi posso sbizzarrire creando dei controlli complessi. Penso che con un uso più professionale del VB questi controlli si possano fare all'interno del codice stesso ma, per me, un po' ruspante, è la strada più semplice.

    Grazie di nuovo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-06-22T11:48:40+00:00

    Ciao Giorgio PietroCherubini,

    considera il codice seguente, da adattare:

    Const cstrFoglio = "Foglio1"

    Dim rng As Excel.Range

        ' ...

        With ThisWorkbook

          Set rng = .Names("Titoli").RefersToRange

          Set rng = rng.Find(What:=.Worksheets(cstrFoglio).Cells(2, 2).Value, _

                             After:=rng(1), _

                             LookIn:=xlFormulas, _

                             LookAt:=xlPart, _

                             SearchOrder:=xlByRows, _

                             SearchDirection:=xlNext, _

                             MatchCase:=False, _

                             SearchFormat:=False)

          If rng Is Nothing Then

            ' NON TROVATO

          Else

            rng.Resize(Columnsize:=6).Delete Shift:=xlUp

          End If

        End With

        ' ...

        Set rng = Nothing

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-06-22T09:14:52+00:00

    Buon giorno.

    Ho fatto diverse ricerche con i relativi tentativi ma senza successo.

    Ho la necessità di eliminare, con il VBA, una porzione di riga all'interno di un intervallo.

    <cut>

    Qui trovi come gestire una tabella di un foglio tramite una UserForm:

    Listbox e ComboBox hanno le stesse proprietà.

    La risposta è stata utile?

    0 commenti Nessun commento