Condividi:        

Andare a capo nella stessa cella da vba

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Andare a capo nella stessa cella da vba

Postdi WCB » 31/07/19 09:44

Buondì a tutti :)
il titolo per intero sarebbe questo: " Andare a capo nella stessa cella da vba (integrando ad un altro codice)"
Espongo il problema e spero che possiate aiutarmi :roll: :
in una userform ho 4 textbox e un commandbutton.
Al commandbutton è associato questo codice che serve a splittare il testo (txt1, txt2 e txt3) se al loro interno è presente un trattino "-":
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
Dim LString As String, LArray() As String
Dim FString As String, FArray() As String
Dim GString As String, GArray() As String
Dim LastRow As Long
Dim i
Dim sh1 As Worksheet
Set sh1 = Sheets("Sheet1")
With sh1
LString = Me.TextBox3.Text
LArray = Split(LString, "-")
L = UBound(LArray)
FString = Me.TextBox1.Text
FArray = Split(FString, "-")
F = UBound(FArray)
GString = Me.TextBox2.Text
GArray = Split(GString, "-")
G = UBound(GArray)
LastRow = .Cells(sh1.Rows.Count, "B").End(xlUp).Row + 1
mMax = Application.WorksheetFunction.Max(L, F, G)
For i = 0 To mMax
  On Error Resume Next
  .Range("A" & LastRow + i) = FArray(i)
  .Range("B" & LastRow + i) = GArray(i)
  .Range("C" & LastRow + i) = LArray(i)
  .Range("D" & LastRow + i) = TextBox4.Text
Next i
On Error GoTo 0
End With
End Sub

Nella textbox1 aggiungo diverse stringhe di testo che hanno lunghezze differenti (20 lettere, 50, 100 ecc) nel momento in cui voglio che una stringa venga "splittata", quindi ritorno a capo nella cella sottostante, basta che inserisco un trattino e la divide senza problemi.
Purtroppo una stringa di testo può essere più lunga rispetto ad un'altra e nel momento in cui la riporta nella cella, arrivata al limite di questa cella, questa me la taglia :eeh: .
Il risultato che vorrei è che nel momento in cui arriva al limite della cella, essa (la stringa di testo) vada a capo nella stessa cella come fa ALT + Invio.
Sarebbe possibile fare ciò?
Se avete bisogno di chiarimenti, sono a vostra disposizione :D
Vi ringrazio in anticipo della preziosa disponibilità e buon fine luglio :)
"I computer sanno quando vai di fretta"
Excel 2016
Avatar utente
WCB
Utente Senior
 
Post: 101
Iscritto il: 09/01/19 17:52

Sponsor
 

Re: Andare a capo nella stessa cella da vba

Postdi Anthony47 » 01/08/19 00:54

Senza commentare l'architettura della tua macro, per quello che chiedi devi impostare "Testo a capo" nelle celle che vai a compilare.
Lo puoi fare in fase di progettazione del foglio, assegnando questa formattazione alle colonne A-B-C-D; oppure lo fai nella macro aggiungendo il comando a ogni scrittura di cella:
Codice: Seleziona tutto
  .Range("A" & LastRow + i) = FArray(i)
  .Range("A" & LastRow + i).WrapText = True
  .Range("B" & LastRow + i) = GArray(i)
  .Range("B" & LastRow + i).WrapText = True
  .Range("C" & LastRow + i) = LArray(i)
  .Range("C" & LastRow + i).WrapText = True
  .Range("D" & LastRow + i) = TextBox4.Text
  .Range("D" & LastRow + i).WrapText = True
(non ti dico quale e' la scelta piu' efficiente)

Ma sei sicuro che il contenuto dei textbox debba essere scritto su N celle diverse, o non sia sufficiente scriverle tutte nella stessa cella dopo aver impostato "Testo a capo" e sostituito i "trattini" con "a capo"? Tipo
Codice: Seleziona tutto
  .Range("A" & LastRow) = Replace(Me.TextBox1.Text, "-", Chr(10), , , vbTextCompare)
  .Range("A" & LastRow).WrapText = True
  .Range("B" & LastRow) = Replace(Me.TextBox2.Text, "-", Chr(10), , , vbTextCompare)
  .Range("B" & LastRow).WrapText = True
  .Range("C" & LastRow) = Replace(Me.TextBox3.Text, "-", Chr(10), , , vbTextCompare)
  .Range("C" & LastRow).WrapText = True
  .Range("D" & LastRow) = TextBox4.Text
  .Range("D" & LastRow).WrapText = True

Un'ultima osservazione: tu carichi il contenuto di 4 textbox nelle colonne A:D; pero' il calcolo di LastRow lo fai in colonna B: sei sicuro che le 4 colonne sono sempre allineate, o che e' la B quella che conterra' sempre piu' righe delle altre? Se No, allora prima o poi con un nuovo inserimento andrai a cancellare qualcosa nelle altre colonne (sostituendo cioe' con nuovi valori del contenuto gia' presente).
Forse ti aiuterebbe calcolare LastRow su tutte le colonne A:D, cosa che potresti fare con questo codice (il sostituzione della tua riga LastRow = Etc etc):
Codice: Seleziona tutto
On Error Resume Next
LastRow = Sh1.Range("A:D").Find(What:="*", After:=[A1], _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlPrevious).Row
On Error GoTo 0
If LastRow = 0 Then LastRow = 2

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Andare a capo nella stessa cella da vba

Postdi WCB » 01/08/19 11:19

Ciao Anthony,
scusami per il ritardo della mia risposta :cry:
Come sempre ti ringrazio per le soluzioni proposte.
Le ho provate tutte e quella adatta a me è la prima (lasciando invariato il resto del codice) in quanto, appunto, mi fa andare il testo a capo.
Per quanto riguarda il trattino...mi serve a dividere il testo andando a capo nella cella sottostante :)
Grazie ancora e buona continuazione :D
"I computer sanno quando vai di fretta"
Excel 2016
Avatar utente
WCB
Utente Senior
 
Post: 101
Iscritto il: 09/01/19 17:52


Torna a Applicazioni Office Windows


Topic correlati a "Andare a capo nella stessa cella da vba":


Chi c’è in linea

Visitano il forum: Marius44 e 40 ospiti