RISOLTO Macro VBA per excel.

Stato
Discussione chiusa ad ulteriori risposte.

Merlin38

Utente Attivo
231
64
Salve a tutti.

ho un problema con questa macro di excel
Codice:
 Sub Aggiorna()

'
     Dim cella As Range
    For Each cella In Range("K5:K6")
        Dim strCella As String
        strCella = cella.Text
        Dim parole() As String
        parole() = Split(strCella)
        Dim nuovaStr As String
        nuovaStr = ""
        For i = 0 To UBound(parole)
            Select Case parole(i)
                
                Case "OTTONE"
                    parole(i) = "OTT"
            
            End Select
          If nuovaStr <> "" Then
   nuovaStr = nuovaStr & " "
End If


            nuovaStr = nuovaStr & parole(i)
        Next
        cella.FormulaR1C1 = nuovaStr
    Next
End Sub
Dunque io utilizzo questa macro (non completa perchè praticamente ci devo aggiungere molte altre parole) per abbreviare delle descrizioni.
Allora la descrizione è composta da diverse parole misure ecc ecc che però non può superare i 40 caratteri, attualmente se supera i 40 caratteri su excel me lo segnala io avvio la macro e con le abbreviazioni dovrebbe scendere sotto i 40 caratteri. ecco.. ora arrivo al problema. Purtroppo con questa macro sono limitato, ovvero che la macro non fa altro che un trova e sostituisci di massa e praticamente mi abbrevia tutto. Nel caso in cui io abbia una descrizione ad esempio cosi " PANNELLO POSTERIORE COLORE NERO SPESSORE 2MM" dunque in questo caso è possibile modificare la macro in modo che non mi abbrevi tutto in " PANN. POST. COL. NERO SP. 2mm" ma che esegua una specie di ciclio iniziando dal primo ovvero abbrevia soltanto PANNELLO e se con l'abbreviazione rientra nei 40 caratteri si ferma senza proseguire.
Spero di essermi spiegato bene! grazie in anticipo a tutti.

- - - Updated - - -

Allora io ho aggiunto queste stringhe
Codice:
  If Range("L10").Value > 40 Then

 Range("K10").Replace What:="PANNELLO", Replacement:="PANN."
  ElseIf Range("L10").Value > 40 Then
  Range("K10").Replace What:="POSTERIORE", Replacement:="POST."

    End If
Dunque cosi se sta sotto i 40 caratteri non fa niente ed è giusto però se supera i 40 caratteri abbrevia direttamente tutto senza riverificare la condizione anche se io l'ho scritta
ho provato anche a mettere più IF di seguito ma niente... continua ad abbreviare tutto senza ricontrollare la condizione come posso fare? grazie.
 

Merlin38

Utente Attivo
231
64
Si, perchè nella K10 c'è la descrizione, mentre nella L10 c'è il "contacaratteri" ho messo questa formula nella L10 =LUNGHEZZA(K10) in modo tale che mi conti quanti caratteri sono, per questo controllo la L10, però è come se lo controllasse una prima volta dopodichè non lo ricontrolla anche se io l'ho scrivo 50 volte in 50 diversi IF, considera solo la prima, non riesco a capire come potrei risolvere :(
 
M

Mursey

Ospite
Il contenuto della cella L10 lo vedi cambiare ?
Fai una prova usando il Value invece del Replace e guarda se la L10 diminuisce.
 

Merlin38

Utente Attivo
231
64
Risolto! in questo modo
Codice:
 Sub Aggiorna()
 Dim Valore As Integer
Valore = Range("L10").ValueIf Valore > 40 Then
Range("K10").Replace What:="PANNELLO", Replacement:="PANN."


End If
Valore = Range("L10").Value
If Valore > 40 Then
Range("K10").Replace What:="POSTERIORE", Replacement:="POST."
End If
In pratica prima attribuivo solo una volta alla variabile Valore = Range("L5").Value, dovevo semplicemente ripeterlo dopo ogni IF ... non ha molto senso come cosa.. non dovrebbe comunque aggiornarsi da solo?
 
M

Mursey

Ospite
Prima erano elseif, mi sembra strano che non funzioni anche scrivendo
Codice:
If Range("L10").Value > 40 Then
   Range("K10").Replace What:="PANNELLO", Replacement:="PANN."
End If
If Range("L10").Value > 40 Then
   Range("K10").Replace What:="POSTERIORE", Replacement:="POST."
End If
 
  • Like
Reactions: Merlin38

Merlin38

Utente Attivo
231
64
Umh.. forse ho capito che cosa ho fatto, praticamente io inizialmente ho attribuito la Variabile "Valore" alla cella L10, poi scrivendo
Codice:
If Valore > 40 Then
Range ("K10").Replace What:= "PANNELLO", Replacement:="PANN."
End If
If Valore > 40 Then
Range ("K10").Replace What:="POSTERIORE", Replacement:="POST."
End If
Ok... perchè questo non funziona? anche se praticamente è uguale? con la differenza che la variabile l'ho attribuita a inizio codice? cioè qual'è la differenza?
PS: anche quello che hai messo tu funziona cambia che tu non hai il termine Valore = Range("L10").Value ma è identico
 
M

Mursey

Ospite
Umh.. forse ho capito che cosa ho fatto, praticamente io inizialmente ho attribuito la Variabile "Valore" alla cella L10, poi scrivendo
Codice:
If Valore > 40 Then
Range ("K10").Replace What:= "PANNELLO", Replacement:="PANN."
End If
If Valore > 40 Then
Range ("K10").Replace What:="POSTERIORE", Replacement:="POST."
End If
Ok... perchè questo non funziona? anche se praticamente è uguale? con la differenza che la variabile l'ho attribuita a inizio codice? cioè qual'è la differenza?
PS: anche quello che hai messo tu funziona cambia che tu non hai il termine Valore = Range("L10").Value ma è identico

Non puo' funzionare perche' la variabile non viene piu' modificata e quindi rimane con il vecchio valore.
A questo punto la viarabile non ti serve e basta scrivere come ho scritto io.
 
  • Like
Reactions: Merlin38

Merlin38

Utente Attivo
231
64
Ahhh perfetto! credevo che la variabile cambiasse in automatico e quindi con la condizione dell'if si "aggiornasse" ma ok ! tutto chiaro grazie mille per la disponibilità!
 
  • Like
Reactions: Mursey
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 17 18.1%
  • Gearbox

    Voti: 1 1.1%
  • Xbox & Bethesda

    Voti: 67 71.3%
  • Square Enix

    Voti: 3 3.2%
  • Capcom

    Voti: 5 5.3%
  • Nintendo

    Voti: 14 14.9%
  • Altro (Specificare)

    Voti: 9 9.6%

Discussioni Simili