RISOLTO Macro con excel

Stato
Discussione chiusa ad ulteriori risposte.

Merlin38

Utente Attivo
231
64
Buongiorno a tutti, ho riscontrato un problema con excel, ho fatto questa mini macro per excel che provvede ad abbreviare le parole che voglio io, il problema è che quando le abbrevia in questo caso mi abbrevia OTTONE in OTT, mi lascia uno spazio alla fine, e non saprei come risolvere questo piccolo problema, se vi state chiedendo "ma che ti frega di uno spazio?" lo spazio alla fine mi crea problemi perchè il file excel poi deve essere importato su SAP (software gestionale) che rompe le scatole se si superano i 40 caratteri, tuttavia se si clicca 2 volte di seguito la macro mi aggiunge due spazi.. come potrei risolvere? grazie mille in anticipo.
Se non avete capito niente di tutto ciò che vi ho scritto non esistate a chiedermi spiegazioni! grazie mille!.




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
            nuovaStr = nuovaStr & parole(i) & " "
        Next
        cella.FormulaR1C1 = nuovaStr
    Next
End Sub
 
M

Mursey

Ospite
Lo spazio aggiungilo in questo modo
Codice:
        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
Controlla la sintassi perche' non sono sicuro di averla scritta bene.
 
  • Mi piace
Reazioni: LordNight

Merlin38

Utente Attivo
231
64
Grazie per la risposta, ma praticamente l'effetto che vorrei è esattamente il contrario :asd: perchè non so come mai lo spazio ogni volta che avvio la macro me lo aggiunge lui, comunque ho risolto modificando il tuo codice, grazie mille!
 

Merlin38

Utente Attivo
231
64
Certamente, hai ragione posto il codice e come l'ho risolto cosi se qualcuno si ritrova con il mio problema ha la soluzione pronta ;)
Codice:
[COLOR=#333333]Sub Aggiorna()[/COLOR]
'
     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
            nuovaStr = nuovaStr & parole(i) & " "
        Next
        cella.FormulaR1C1 = nuovaStr
    Next
riga = Cells(5, 11).End(xlDown).Row


Cells(5, 11) = Trim(Cells(5, 11))

End Sub

Ho aggiunto semplicemente le ultime due righe dopo next in questo modo ogni volta che avvio la macro mi leva automaticamente gli spazi finali :)
 
  • Mi piace
Reazioni: Mursey
M

Mursey

Ospite
Non capisco pero' perche' la mia soluzione non andasse bene, aggiungeva gli spazi finali solo dopo il primo giro.
Ma l'avevi provato ? ;)
 

Merlin38

Utente Attivo
231
64
esatto il tuo mi Aggiungeva lo spazio, io lo volevo togliere perchè la macro me lo generava per non so quale motivo, mi sono spiegato male evidentemente nel primo post :D
 
M

Mursey

Ospite
esatto il tuo mi Aggiungeva lo spazio, io lo volevo togliere perchè la macro me lo generava per non so quale motivo, mi sono spiegato male evidentemente nel primo post :D

Guarda che la mia soluzione mette lo spazio solo se serve lasciando la fine della stringa pulita :
se ho "uno due" e devo aggiungere "tre" concateno prima lo spazio e poi aggiungo "tre" ottenendo "uno due tre"
in questo modo la stringa e' pronta e pulita senza togliere spazi in fondo perche' non ne esistono.
 

Merlin38

Utente Attivo
231
64
Dunque ho voluto riprovarci con la tua soluzione, il codice utilizzato è questo
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 & parole(i) & " "
            End If
            nuovaStr = nuovaStr & parole(i)
        Next
        cella.FormulaR1C1 = nuovaStr
    Next
End Sub

Allora inizialmente io ho questa cella "VITE M3X4 OTTONE"

Avviando la macro SENZA l'aggiunta del tuo fix mi scrive "VITE M3X4 OTT_" (con lo spazio finale che io non voglio che metta in automatico)
mentre avviando la macro con l'aggiunta del fix me lo scrive cosi "VITEM3X4 M3X4OTT OTT" diciamo che lo spazio finale non lo rimette è vero ma fa qualche casino come puoi vedere sopra.
 
M

Mursey

Ospite
Non hai messo bene il codice, io avevo scritto
Codice:
If nuovaStr <> "" Then
   nuovaStr = nuovaStr & " "
End If
 
  • Mi piace
Reazioni: Merlin38

Merlin38

Utente Attivo
231
64
Wow, allora a prima vista non ho ben capito cosa cambiasse da quello che ho messo io però ho fatto la prova per "stupidi" e ho copiato e incollato il tuo codice e.. funziona! continuo a non capire cosa avevo cambiato :O, comunque visto che ci siamo ne approfitto, a livello Pratico le due soluzioni sono uguali? ( sia il tuo che quello che ho postato io dopo) Grazie mille in anticipo!

EDIT: l'ho riguardato, avevo preso la stringa sotto e quindi aggiunto quel parole(i) per questo mi ripeteva tutto :P
 
  • Mi piace
Reazioni: Mursey
M

Mursey

Ospite
In programmazione quello che si vede e' il risultato finale quindi si potrebbe dire che le due soluzioni sono entrambe valide.
Pero' la scrittura del codice e' importante, nella tua soluzione crei una stringa in un modo che non ti piace e allora devi intevenire per correggerla, quindi in un certo senso la stringa non viene creata bene.
Nel mio codice la creo subito buona e non serve correzione ;)
 
  • Mi piace
Reazioni: Merlin38
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!