Utilizzo di Replace con Offset



  • Utilizzo di Replace con Offset
    di gpc data: 11/07/2015 18:49:50

    Buona sera.
    Nella mia ricerca di “copiatore” di codici VBA mi sono imbattuto spesso nel Vostro sito dove ho trovato degli spunti interessanti per risolvere le mie applicazioni. Essendo diversi giorni che cerco di risolvere la seguente routine, senza nessun successo, ho pensato a Voi ed alla Vostra cortese disponibilità.

    Utilizzo delle UserForm con ComboBox, TextBox e Pulsanti per:
    In un foglio Excel, Pannello, carico una lista di Titoli, nel mio caso nella colonna E.
    Esempio Bichiere

    A questi titoli, nella colonna P, vengono aggiunte delle ulteriori informazioni per individuarne l’utilizzo.
    Esempio Bichiere da acqua in cristallo
    Bichiere da acqua in vetro
    Bichiere da vino in cristallo
    Bichiere da vino in vetro

    Supponiamo che per un errore di battitura, o per qualsiasi altro motivo, voglia modificare Bichiere in Bicchiere.

    Ho aggiunto la colonna, O, con il termine “Bichiere” che utilizzo come riferimento per un ciclo Do Loop.

    Esempio Bichiere Bichiere da acqua in cristallo
    Bichiere Bichiere da acqua in vetro
    Bichiere Bichiere da vino in cristallo
    Bichiere Bichiere da vino in vetro

    Attraverso il seguente codice ottengo:

     
    'MODIFICA COLONNA DEL TITOLO
    Sub InserimentoTitoloAggiorna()
    Dim x
    Dim c
    Dim firstAddress
    
    'Cerca, nella sola colonna O, il nome
    With Worksheets("Pannello").Range("O1", Range("O1").End(xlDown))
    x = Worksheets("Pannello").Cells(2, 3)
    ‘Testo da modificare
    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)
    
            'MsgBox "Funziona"
    
            Cells.Replace What:=Cells(2, 3), _
                Replacement:=Cells(8, 3)
            ‘Aggiorna la colonna O con il termine corretto della Cells(8, 3)
    
            ‘Tenendo conto che la seguente routine, posta su un modulo, selezionando la cella P3 funziona
             'Range("P3") = Replace(Range("P3"), Cells(2, 3), Cells(8, 3))
    
             ‘Ho supposto il seguente codice, con errore di run-time ‘1004’
             Cells.Offset(0, 1) = Replace(Cells.Offset(0, 1), _
                 Cells(2, 3), Cells(8, 3))
    
            ‘Ho fatto vari tentativi tipo:
            ‘Cells.Offset(0, 1).Replace What:=Cells(2, 3), _
                    Replacement:=Cells(8, 3)e 
             ‘ma senza successo.
    
    End Sub
    
    'Grazie per l'aiuto



  • di Vecchio Frac data: 12/07/2015 18:38:11

    Temo di essermi un po' perso nella spiegazione.





  • di gpc data: 12/07/2015 21:06:41

    Ciao e grazie per l’interessamento.
    Mi spiego meglio.
    Il problema nasce nel constatare in quanti modi diversi viene chiamato lo stesso articolo con la spiacevole conseguenza di trovare codifiche differenti per lo stesso prodotto. Ho supposto che vincolando la creazione di un nuovo articolo ad una radice del prodotto, preinserita dal responsabile, questo rischio si dovrebbe almeno circoscrivere, se non eliminare. Il layout funziona così.
    Tramite UserForm1 inserisco nella Colonna E le radici degli articoli.
    Tramite UserForm2 collego una radice alla sua descrizione. Come da esempio:
    Colonna E Colonna O Colonna P
    Bichiere Bichiere Bichiere per acqua in cristallo
    Bottigla Bichiere Bichiere per acqua in vetro
    Caraffa Bichiere Bichiere per vino in cristallo
    Eccetera Bichiere Bichiere per vino in vetro

    Se nello scrivere la radice del titolo o sbagliato, (Bichiere deve essere Bicchiere), questo errore lo ritrovo su tutti gli articoli collegati.

    Tramite i controlli sulla UserForm1 ed una routine richiamo la radice sbagliata, la correggo e con un comando la reinserisco.

    Sulla colonna E è fatta.
    La colonna O la inserisco per avere un riferimento per il ciclo Do Loop, alter soluzioni sono ben accette.
    Mentre per quanto riguarda la colonna P pensavo di utilizzare il segnale sulla cella della colonna O e tramite Offset spostarmi sulla cella della colonna P, quindi con Replace modificare il contenuto.
    Nella cella (2, 3) c’è la radice da modificare, (Bichiere).
    Nella cella (8, 3) c’è la radice modificata, (Bicchiere).
    Potrei anche utilizzare una variabile ma, per me, è più facile utilizzare una cella del foglio.
    Il codice postato permette la modifica delle voci della colonna O ma non sono riuscito a modificare le voci della colonna P.
    La parte di codice riferita a Replace l’ho verificata, come scritto, selezionando una cella da modificare e quindi lanciando il pezzo di routine dedicato, e “manualmente” funziona.
    Spero di essere stato esauriente.
    Grazie di nuovo