› Excel e gli applicativi Microsoft Office › [Excel Mac 2011] Multilinea in userform diventa linea singola nel foglio
-
AutoreArticoli
-
Ciao a tutti!
Mi sono appena iscritto, sono un utente base e per le mie necessità di solito mi basta consultare il patrimonio di soluzioni online. Ma questa volta non ne esco, complice, anche, il disgraziato Excel per Mac 2011. Su windows nessun problema, ma il destinatario usa un Mac...Ho creato uno userform per archiviare dei dischi, semplice e funzionale. Quando si clicca il pulsante di registrazione, i dati scritti nei campi dello userform vengono riportati nel foglio, e avanti così.
Il problema su Mac (ho fatto una versione appositamente, perché ciò che funziona su win non gira su Mac e viceversa) è sui campi multilinea dello userform: ho settato l'a-capo con la combinazione di tasti shift+enter e funziona tutto, aggiungo le righe e nessun problema. Ma quando lo userform invia i dati al foglio, nella rispettiva cella viene scritto tutto su una riga! Ho formattato le celle del foglio con il testo a capo, ma l'interruzione di riga dello userform viene scritta come spazio nelle celle. Su win nessun problema, come lo vedo nello userform così viene riportato nelle celle.
Qualche idea? Come faccio a fargli capire che una interruzione di riga nello userform corrisponde a una interruzione di riga anche nella rispettiva cella?
In Excel per Windows il ritorno a capo in cella si fa, manualmente, con Alt+Invio e corrisponde a vbLf = Chr$(10).
Non ho un Mac per fare il test quindi dimmi: come si fa, manualmente, un ritorno a capo in cella in Excel per Mac?
La mia idea è che prima di inviare i dati alla cella, devi fare un replace nella stringa del carattere di line feed e inserire il codice carattere che in Mac forza l'alinea nella cella.
Ciao vecchio frac e grazie della risposta.
Nel Mac il ritorno a capo dipende dalle situazioni: nello userform puoi settare (nelle proprietà del textbox) il ritorno a capo con il solo enter o con shift+enter, e funziona esattamente come su win. Io ho optato per la seconda, così si può usare enter per spostarsi in sequenza tra i campi. Nelle celle non ricordo bene ora (scrivo da win), ma c'è anche lì una combinazione con un tasto in più. Ne ho memoria vaga e dovrei provare, forse cmd+alt+enter. Se serve poi ti dico. Comunque è possibile anche lì.
La mia idea è che prima di inviare i dati alla cella, devi fare un replace nella stringa del carattere di line feed e inserire il codice carattere che in Mac forza l'alinea nella cella.
Infatti, anche io pensavo una cosa così, ossia di dire nel codice vb che il ritorno a capo nel textbox (e quindi il carattere che lo rappresenta) deve essere tale anche nelle celle (e convertirlo in tale carattere), ma non so come si faccia una cosa così. Intuisco cosa dovrei dire ma non so come dirlo!
Cercando in rete ci sono tre opzioni per andare a capo:
Constant Value Description
----------------------------------------------------------------
vbCr Chr(13) Carriage return
vbCrLf Chr(13) & Chr(10) Carriage return–linefeed combination
vbLf Chr(10) Line feed
vbCr : - return to line beginning
Represents a carriage-return character for print and display functions.vbCrLf : - similar to pressing Enter
Represents a carriage-return character combined with a linefeed character for print and display functions.vbLf : - go to next line
Represents a linefeed character for print and display functions.viger wrote:Nel Mac il ritorno a capo dipende dalle situazioni: nello userform
Mi sembrava di essere stato chiaro ma mi sbagliavo: volevo sapere come si forza in Mac il ritorno a capo manuale durante l'editing manuale in una cella. Non in un campo testo di un userform.
In Win si usa Alt-Invio. E col Mac?
viger wrote:Nelle celle non ricordo bene ora (scrivo da win), ma c'è anche lì una combinazione con un tasto in più
Ecco la risposta 🙂
Dovresti avere sottomano il Mac e fare questa prova:
- in una cella vuota digita "A" maisucola
- poi digita la combinazione di tasti per il ritorno a capo
- poi digita un'altra "A" maiuscola e conferma ma rimani su questa cella
- adesso attiva l'editor di codice (che in Windows è la combinazione di tasti Alt-F11)
- attiva la finestra immediata (Windows: Ctrl-G)
- digita
?asc(mid(activecell, 2, 1))
- il valore che ottieni è il linefeed su Mac (dovrebbe essere 10)
- ora digita
?asc(vbLf), asc(vbNewLine)
e dimmi che valori ottieniPerfetto, tutto chiaro, nonostante la curiosità stasera non sono sicuro di riuscire (non ho il mac qui con me), in caso domani ti aggiorno sicuro. Per intanto grazie mille! 🙂
Non preoccuparti, adesso è anche una mia curiosità 🙂
Quindi, quando puoi e se vuoi siamo qui.
Eccomi!
Allora, per andare a capo in una cella su Mac (Excel 2011) hai tre opzioni:ctrl+alt+invio
cmd+alt+invio
ctrl+cmd+invioAi comandi che mi hai dato, la risposta è identica per tutti e tre gli a capo:
?asc(mid(activecell, 2, 1)) 13 ?asc(vbLf), asc(vbNewLine) 10 13
Su Win il primo dato è in effetti 10, su Mac 13.
viger wrote:Su Win il primo dato è in effetti 10, su Mac 13.
Lo sapevo o meglio me lo immaginavo 🙂
Adesso il prossimo test: posizionati in cella vuota e sempre in finestra immediata:
activecell = "A" & vbnewline & "B"
Questo dovrebbe far apparire A e B nella cella attiva separate da ritorno a capo.
Se funziona, dovremo poi esaminare il contenuto della textbox per vedere come viene codificato l'a capo.
viger wrote:Il problema su Mac è sui campi multilinea dello userform
Una osservazione banale: la proprietà Multiline del textbox dello userform è settata su True vero?
Anche il formato "testo a capo" della cella deve essere impostato.
vecchio frac wrote:
activecell = "A" & vbnewline & "B"
Questo dovrebbe far apparire A e B nella cella attiva separate da ritorno a capo.
Confermo, funziona! A e B correttamente scritti nella cella.
vecchio frac wrote:
Una osservazione banale: la proprietà Multiline del textbox dello userform è settata su True vero?Sì, confermo. Infatti sullo userform funziona tutto bene, è quando il modulo riporta i dati nello spreadsheet che vengono persi gli a capo.
vecchio frac wrote:
Anche il formato "testo a capo" della cella deve essere impostato.Confermo anche questo
Allego un file, avvia l'userform premendo il pulsantone e scrivi qualcosa nella textbox, anche andando a capo con la tastiera nel modo che conosci. In tempo reale il contenuto della cella A1 si modifica e riflette il contenuto della textbox.
Allegati:
You must be logged in to view attached files.Fatto.
Scrive in tempo reale, va a capo nel textbox ma converte in spazio nella cella. Ho provato con tutte le combinazioni possibili di a capo, ma nella cella converte sempre in spazio. Interessante che la combinazione alt+cmd+invio inserisce due a capo (quindi uguale a shift+invio premuti due volte), non me ne ero mai accorto! Però non cambia nulla, a parte che aggiunge due spazi, uno per ogni a capo. Se faccio cinque a capo, mi converte in cinque spazi.Aggiungi al codice queste tre righe:
Private Sub TextBox1_AfterUpdate() Range("A1") = Replace(TextBox1, Chr(13), vbNewLine) End Sub
e commenta il codice che intercetta il Change nella textbox così non interferisce:
'Private Sub TextBox1_Change() ' Range("A1") = TextBox1 'End Sub
Peccato non poter fare le prove direttamente 🙁
vecchio frac wrote:
Peccato non poter fare le prove direttamenteEh, ti capisco, così è uno stillicidio...
Comunque ora funziona! Ma ho dovuto sostituire il Chr(13) con Chr(10), altrimenti continuava a convertire in spazi. Ho provato con tutti gli a capo disponibili e va 🙂Ho fatto un po' di prove sul mio file, ma senza successo, ne so troppo poco e purtroppo il file non gira su Win. In pratica non so come far sì che mi aggiorni i campi multiline (sono tre). Te lo allego comunque, magari ci risparmiamo un po' di fatica (tu soprattutto). Cavolo avessi tempo mi metterei a studiare un po', divertimento a parte, è utile! E' che se comincio poi mi prende la mano...
Allegati:
You must be logged in to view attached files.viger wrote:ho dovuto sostituire il Chr(13) con Chr(10)
Già già e pensare che lo sapevo, corrisponde a vbLf (line feed), mentre per il Mac è solo Chr(13) cioè vbCr... benedetti sistemi 🙂
viger wrote:purtroppo il file non gira su Win
uhm 🙁
Mi dà un curioso errore di autorizzazione negata in apertura del form... domani controllo meglio 😛
Ciao a tutti.
vecchio frac wrote:Mi dà un curioso errore di autorizzazione negata in apertura del form... domani controllo meglio
L'errore è dovuto al fatto che nella combobox è stato impostato un valore per RowSource.
Quando si utilizza questa proprietà, la proprietà List non può essere modificata.
PS: per generare una versione del programma che sia eseguibile su entrambe le piattaforme è possibile usare la compilazione condizionale.
#If Mac Then 'codice per Mac #Else 'codice per Windows #End If
zer0kelvin wrote:è possibile usare la compilazione condizionale
E' un'ottima idea e da implementare certamente visto che si intende lavorare su sistemi diversi, ma secondo me non c'è problema di compatibilità o conflitto nel caso particolare. E' che sembra che Mac non applichi il "testo a capo" per la cella :/
Ciao ragazzi, nessuna novità?
Io sono andato avanti col mio file e ormai mi manca solo questo passo (spero). Peccato perché su win funziona tutto senza tribolare, ma il passaggio tra le due piattaforme è disastroso... Il codice VBA lo importa bene, ma gli oggetti...
Lo UserForm modificato e salvato su Mac manco esiste più in win. Follia. Spero le nuove versioni siano migliorate!Aspetta, ho postato prima di pensare, faccio due tentativi e vi faccio sapere...
Tutto a posto!
Ci ho messo un po' perché ho intanto completato tutto il resto.
Ho inserito nel codice VBA (dove necessario) questa rigaReplace(nome_mio_textbox, Chr(10), vbNewLine)
e va tutto alla grande! E' venuto proprio carino e pratico.
Grazie mille!OT: Excel per Mac 2011 in sviluppo VBA è quasi a livello di inutilizzabilità, lentissimo, sembra di lavorare su un mattone. Boh, spero per loro che le nuove versioni siano migliorate
Mi pareva che lo avessimo già provato. Comunque sì, il line feed viene interpretato in due modi diversi.
Non ho mai messo le mani su un Mac, non mi sbilancio sulle performances 🙂
-
AutoreArticoli