Originariamente inviato da Paperina(l4p)
Ciao a tutti
Per stampare un testo in un riquadro ben preciso, mi è sorta l'esigenza di mandare a capo il testo dopo un certo numero di caratteri, senza però tagliare la parola, ma andando a cercare lo spazio più vicino. Ad esempio se lo spazio successivo è più distante di 5 caratteri, cercare lo spazio precedente.
Qualcuno mi può aiutare con il codice che devo scrivere??
Grazie Mille!!!
In pratica il procedimento da fare dovrebbe essere questo:
- Controlli quanti caratteri ci sono tra un invio e l'altro
- Se lo spazio e maggiore di n caratteri(la lunghezza della riga) inserisci un invio al primo spazio disponibile prima della fine della riga (primo invio +n caratteri)
- Se lo spazio e minori controlli il prossimo invio
Ho provato a implementare questa funzione che ti ritorna la stringa impaginata:
codice:
Public Function Impagina(sSource As String) As String
Const cpl = 30 'Caratteri per linea
Impagina = sSource & " " & vbCrLf 'spazio e invio sono usati per editare le stringhe. Per effettuare l'operazione con successo lastringa deve finire per spazio + invio, in modo da far trovare sempre il carattere cercato.
Dim x, x2 As Integer
x = 1
x2 = InStr(x, Impagina, vbCrLf) 'cerco primo invio
'If x2 = 0 Then x2 = Len(Impagina) 'Se non ci sono più invii verifico fino alla fine
While x2 > 0 'finchè trovo invii
' If x = x2 Then Exit Do
If x2 - x > cpl Then 'Verifico lunghezza SubStringa
'Da riimpaginare
x = InStrRev(Impagina, " ", x + cpl) 'Cerco spazio prima di fine riga
Impagina = Left(Impagina, x) & vbCrLf & Mid(Impagina, x + 1) 'e aggiungo invio
x = x + 2 'continuo impaginazione dopo ultimo invio
Else
x = x2 + 1 'continuo la ricerca da l'ultimo invio trovato
End If
x2 = InStr(x, Impagina, vbCrLf) 'cerco prossimo invio
fine
Wend
End Function
P.S. :Per modifcare la lunghezza della riga devi cambiare il valore della costante cpl