Excel e gli applicativi Microsoft Office Formattazione delle celle e del testo

Login Registrati
Stai vedendo 19 articoli - dal 1 a 19 (di 19 totali)
  • Autore
    Articoli
  • #20440 Score: 0 | Risposta

    Damiano
    Partecipante

      Ciao a tutti,

      sto cercando di capire come scrivere il codice per fare in modo che:

      -la cella sia di una certa larghezza (determinate colonne) e altezza (determinate righe)

      -il testo sia centrato e in grassetto (tutto il foglio)

      -il testo di una cella vada a capo (determinate celle)

      -le celle abbiano un colore particolare (determinate celle)

       

      Grazie mille..

      #20443 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Parliamo di una tabella Word o di un foglio Excel?

        Hai un esempio da mostrare per capire il risultato atteso?

        Hai provato a stendere un po' di codice?

        Come sei messo a VBA?

         

        #20445 Score: 0 | Risposta

        Damiano
        Partecipante

          Ciao,

          allora in poche parole ho scritto il codice per poter giocare a MasterMind su Excel..l'ho scritto però ora vorrei che una volta che si clicca sul pulsante di avvio, si formattino le celle in una certa maniera.

          Ti appiccico qui una foto di come avrei in mente di far venire fuori le celle..

          Per quanto riguarda il testo (e il colore delle celle) devo ancora pensarci, però vedi le celle con il testo a capo? Vedi che alcune hanno dimensioni diverse da quelle di default?

          #20448 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            Una cella è un oggetto Range che espone determinate proprietà e tra queste ci sono quelle che impostano (o recuperano) il valore del colore di primo piano, di sfondo, eventuale bordo, allineamento, stile, ecc.

            Per esempio:

            with range("A1").Font
                .Color = vbred
                .Bold = True
                .Name = "Consolas"
                .Size = 24
            end with
            

            imposta A1 in colore rosso, grassetto e font "consolas" di dimensione 24.

            Sulla dimensione delle colonne puoi usare Autofit:

            columns(1).autofit    'aggiusta in larghezza la colonna A
            rows(10).autofit      'aggiusta in altezza la riga 10

             

            #20450 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              272 pts

              Damiano ha scritto:

              -la cella sia di una certa larghezza (determinate colonne) e altezza (determinate righe)

              Per impostare un valore preciso:

              range("A1").columnWidth = 16    'imposta la larghezza della colonna A a 16 pixel
              range("A1").RowHeight = 16      'imposta l'altezza della cella A1 a 16 pixel
              #20452 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                Damiano ha scritto:

                ho scritto il codice per poter giocare a MasterMind

                Ottimo esercizio 🙂

                Mi ricorda quando ne ho realizzato la mia versione con le famigerate macro di Lotus 1-2-3 (era il 1990 circa). Quel programmino lo spedii a una rivista che oggi non c'è più e ricevetti pure un premietto in denaro 😉

                #20457 Score: 0 | Risposta

                Damiano
                Partecipante

                  Uooooooooo !!!!!!!

                  Mitico, grazie mille!!! Sìsì, io sono del parere che se bisogna imparare una cosa, si fa molto prima divertendosi!!!

                  Ottimo davvero, anche perchè spieghi sempre qualcosina in più, che è molto utile!!!

                  Una cosa, per mettere che faccia "testo a capo", che devo scrivere?!

                  PS

                  Dì la verità....nella vita precedente facevi l'aiutante a forma di graffetta di Office?!  

                  #20466 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    Damiano ha scritto:

                    per mettere che faccia "testo a capo", che devo scrivere?

                    Che ne dici di provare con:

                    range("A1").WrapText = True

                    Un buon trucco per cominciare a impratichirsi e scoprire da sè queste cose è utilizzare il "registratore di macro". Che poi produce codice da affinare e ottimizzare, vabbè, ma è ottimo per imparare.

                    Un trucco avanzato è utilizzare il visualizzatore oggetti (premi F2 nell'editor) per scoprire tutti - ma proprio tutti - gli oggetti dell'applicazione a disposizione, con i loro bravi metodi e proprietà.

                    Damiano ha scritto:

                    facevi l'aiutante a forma di graffetta di Office

                    Sì... e ancor prima facevo l'OVL di WordStar e prima ancora il "Border Assistant" di Framework IV della Ashton Tate 😀

                    #20624 Score: 0 | Risposta

                    Damiano
                    Partecipante

                      Eheh

                      Grazie mille come sempre.....ascolta io ho scritto così:

                      Columns(1).AutoFit
                      Columns(5).AutoFit
                      Columns(6).AutoFit
                      Columns(7).AutoFit
                      Columns(8).AutoFit
                      'Imposta le colonne segnate a larghezza adattata a quello che c'è scritto dentro
                      
                      Range(10).ColumnWidth = 119
                      Range(11).ColumnWidth = 75
                      'Imposta le larghezze delle colonne, in pixel
                      
                      Range("J1").WrapText = True
                      Range("K1").WrapText = True
                      'Imposta il "Testo a capo" nelle colonne indicate
                      
                      

                      però mi dà questo errore:

                      Che sbaglio?

                      #20630 Score: 0 | Risposta

                      Damiano
                      Partecipante

                        Mmm ho trovato che prima devo mettere il testo a capo e poi la larghezza delle colonne.... Però è anche una questione di logica...l'autofit lo fa solamente dopo che ho inserito il testo....non è una cosa sempre attiva, che ogni volta che io inserisco del testo, la macro fa si che la cella si autofitti istantaneamente.....

                        Mentre l'errore era causato da quello che mettevo dentro le parentesi:

                        Range("J1").WrapText = True

                        La sintassi corretta è:

                        Range("J:J").WrapText = True

                        Ora però ho qualche altra questione da risolvere....

                        #20640 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          272 pts

                          Damiano ha scritto:

                          La sintassi corretta è:

                          No, mi spiace, è corretto anche indicare solo una cella. Come è giusto che sia 🙂

                          Può darsi che a causare l'errore fossero magari delle celle unite.  Non è nemmeno corretto che ci sia la sequenza di operazioni che hai indicato, no no, deve esserci qualcos'altro.

                          Non hai detto su quale riga di codice si verifica l'errore. Ci vorrebbe il file per capire meglio... 

                          Damiano ha scritto:

                          ho qualche altra questione da risolvere

                          Risolto un problema di solito se ne presenta subito un altro, è sempre così 🙂

                          #20643 Score: 0 | Risposta

                          Damiano
                          Partecipante

                            Mmmm diciamo che ho messo alcune righe di codice prima di altre e ora non mi dà l'errore nemmeno mettendo

                            Range("J1").WrapText = True

                            al posto di

                            Range("J:J").WrapText = True

                            perchè infatti, come dici tu (c'ho dovuto ragionare un attimo) la sintassi è cmq corretta...

                            Comunque ora l'errore non lo dà più, però se guardi l'allegato vedi che la colonna J non è bellissima da vedere, per quello impostavo che il testo andasse a capo ma comunque poi gli fissavo una certa larghezza alla colonna....però mettendo i pixel corrispondenti, e cioè 106 (trascinando con il mouse la larghezza della colonna, quesa mi sembra una dimensione decente) viene fuori una cosa spropositata...

                            Allegati:
                            You must be logged in to view attached files.
                            #20661 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              272 pts

                              Ho indovinato il numero in nove tentativi 🙂

                              Damiano ha scritto:

                              mettendo i pixel corrispondenti, e cioè 106

                              L'unità di misura è in punti, non in pixel. Cioè devi guardare il primo dei due numeri che vengono fuori quando clicchi e trascini la larghezza della colonna (106 pixel = 14.43 punti). Che poi i punti dipendono da font, dimensione e stile del carattere oltre che dalla risoluzione dello schermo... fai una cosa approssimata senza perderti nelle misure precise, se cambi pc o monitor puoi sicuramente notare delle differenze rispetto al tuo pc di sviluppo e allora la frustrazione è doppia 🙂

                              columns(10).columnwidth=14.43     'colonna J, 106 pixel circa

                              Concentrati per ora sull'algoritmo e sulla modalità di interazione con l'utente. Non mi piace molto l'inputbox, sarebbe preferibile inserire un numero direttamente nella cella e poi premere un pulsante per confermare l'inserimento della riga.

                              Comunque l'idea è molto carina, e mi piace 🙂

                              Alcuni consigli non richiesti:

                              - metti sempre Option Explicit in testa ai moduli e quindi dichiara tutte le variabili che utilizzi ("i", "j" non sono definite);

                              - se dichiari una variabile, dichiarala del tipo giusto;

                              - se dichiari più variabili sulla stessa riga, specifica per ognuna di esse il proprio tipo, altrimenti vengono tutte dichiarate As Variant (esempio, nella riga "Dim NumX1, NumX2, NumX3, NumX4 As Integer", soltanto NumX4 è di tipo Integer, le altre sono anonime e quindi di tipo Variant, con un piccolo spreco di memoria e perdita di performances);

                              - compatta le istruzioni: invece di una sfilza di Cells(j, 3) = "--" puoi avere un range unico: Range(Cells(j, 3), Cells(j, 8)) = "--";

                              - indenta le istruzioni nei blocchi (If...End If) per la leggibilità del codice come hai fatto con Do e For (oppure, visto che sono If single line, mantieni ognuno di essi su una stessa linea senza usare End If;

                              - a cosa ti serve la Classe1?

                               

                               

                              #20795 Score: 0 | Risposta

                              Damiano
                              Partecipante

                                 

                                vecchio frac ha scritto:

                                L'unità di misura è in punti, non in pixel.

                                Ok capito!

                                 

                                 

                                vecchio frac ha scritto:

                                Non mi piace molto l'inputbox, sarebbe preferibile inserire un numero direttamente nella cella e poi premere un pulsante per confermare l'inserimento della riga.

                                Mmm...interessante....sarebbe però anche il caso di inserire qualche controllo....del tipo che mi deve dare errore se viene digitato qualche numero maggiore di 6, oppure negativo.....o meglio diciamo diverso da interi compresi tra 0 e 6!!

                                 

                                 

                                vecchio frac ha scritto:

                                - metti sempre Option Explicit in testa ai moduli e quindi dichiara tutte le variabili che utilizzi ("i", "j" non sono definite);

                                - se dichiari più variabili sulla stessa riga, specifica per ognuna di esse il proprio tipo, altrimenti vengono tutte dichiarate As Variant (esempio, nella riga "Dim NumX1, NumX2, NumX3, NumX4 As Integer", soltanto NumX4 è di tipo Integer, le altre sono anonime e quindi di tipo Variant, con un piccolo spreco di memoria e perdita di performances);

                                Non sapevo, quindi dovrei scrivere:

                                Dim NumX1 As Integer
                                Dim NumX2 As Integer
                                Dim NumX3 As Integer
                                Dim NumX4 As Integer

                                ? Ma sono stra sicuro che mi dirai che c'è un modo per raggruppare queste istruzioni in un'unica riga!!! Come mi hai consigliato di fare per la cornicetta...In effetti si rende più snello il tutto.

                                vecchio frac ha scritto:

                                - indenta le istruzioni nei blocchi (If...End If) per la leggibilità del codice come hai fatto con Do e For (oppure, visto che sono If single line, mantieni ognuno di essi su una stessa linea senza usare End If;

                                 

                                Questo non l'ho capito....indentare? Cioè mettere in un formato ordinato? Pensavo di aver messo tutto in modo abbastanza ordinato.....intendi forse che avrei dovuto scriverli così:

                                `If Cells((j + 1), 4) = NumX1 Then PosOk = PosOk + 1
                                If Cells((j + 1), 5) = NumX2 Then PosOk = PosOk + 1
                                If Cells((j + 1), 6) = NumX3 Then PosOk = PosOk + 1
                                If Cells((j + 1), 7) = NumX4 Then PosOk = PosOk + 1`

                                ? E senza l' END IF finale?!

                                vecchio frac ha scritto:

                                - a cosa ti serve la Classe1?

                                Te lo spiego qnd riesco a trovare cosa vuol dire!!! (Sto cercando il significato!!!)

                                 

                                Grazie mille intanto!!

                                 

                                #20802 Score: 0 | Risposta

                                vecchio frac
                                Senior Moderator
                                  272 pts

                                  1) Inserire dei controlli sull'input dell'utente è importantissimo proprio per evitare inserimenti incongrui che possono rompere il codice!

                                  2) Le Dim una per riga sono un'ottima idea. Non c'è alcun modo di compattarle nel senso che intendi tu. Ogni variabile deve avere il "As tipo".

                                  3) Indentare significa scrivere le istruzioni per blocchi logici. If ... Then ... End If è un blocco logico, For ... Next è un altro. Dopo ogni istruzione di apertura lasci quattro spazi e continui a scrivere codice che riguarda quel blocco, fino alla chiusura del blocco.  Esempio (completamente inventato):

                                  For i = 1 to 100
                                      a = a + 1
                                      b = a / 2
                                      If a > 10 Then
                                          b = 0
                                          range("A1") = "bip"
                                      Else
                                          b = b / 2
                                          range("A1") = b
                                      End If
                                      For q = 1 to 3
                                          range("A2") = "Calcolo " & q
                                      Next q
                                  Next i
                                    

                                  4) If permette di essere scritto su una linea sola e in tal caso non serve End If. Utile per compattare lo spazio occupato dal codice.

                                  5) Classe1... probabilmente hai cliccato involontariamente... ma sapere cos'è una classe potrebbe esserti utile un giorno 🙂

                                  #20894 Score: 0 | Risposta

                                  Damiano
                                  Partecipante

                                    Ciao..andiamo per gradi..  

                                    1) Ok, voglio ora inserire dei controlli..

                                    Innanzitutto ho tolto il box per l'inserimento dei numeri, però, quando il programma legge le varie righe, arriva qui e..

                                            MsgBox "Digita nelle quattro celle i tuoi numeri e poi clicca su TEST", vbOK
                                    'Regole 3
                                            Num1 = Cells((j + 1), 4)
                                            Num2 = Cells((j + 1), 5)
                                            Num3 = Cells((j + 1), 6)
                                            Num4 = Cells((j + 1), 7)

                                    niente, lui continua a ri-presentarmi questo box di invito ad inserire i numeri ma.....eccheccaspita, lasciameli almeno inserire no?!!?   sì, il fatto è proprio che non mi permette di inserirli perchè non ho niente che lo metta un attimo in "pausa", passa subito al j successivo.

                                    Quindi proprio dopo queste righe avrei bisogno di cliccare un bottone che gli faccia fare i test e quindi andare avanti con il gioco.

                                    MA...finora io ho sempre scritto il codice per una macro e POI assegnato l'intera macro ad un  pulsante....vuoi dirmi che in questo caso dovrei fare una macro dentro ad una macro (Macroception?!) e assegnare la macro interna ad un pulsante? Esiste una cosa del genere?!?!

                                    Allegati:
                                    You must be logged in to view attached files.
                                    #30798 Score: 0 | Risposta

                                    FRANCESCOSTRANO

                                      Ciao ..ma e scritto per vb6?

                                      mi puoi aiutare  cosa manca per far  formattare le colonne excel  a1 b1 c1 ecc....

                                      dal codice spezzettato  da solo errori

                                      cia a presto

                                      posterminale1@libero.it

                                      #30799 Score: 0 | Risposta

                                      FRANCESCOSTRANO

                                        ma non e' codice per visual basic 6

                                        e' per vba?

                                         

                                        ma a chi serve?

                                        #30803 Score: 0 | Risposta

                                        Marius44
                                        Moderatore
                                          58 pts

                                          Ciao @FRANCESCOSTRANO

                                          Perchè ti accodi ad una discussione ormai datata? Ne perdi in visibilità.

                                          Il codice postato è per VBA e serve all'originario richiedente che aveva un problema con la formattazione di testo e celle..

                                          A te cosa serve in particolare? Prova ad aprire una tua discussione specificando il tutto.

                                          Ciao,

                                          Mario 

                                        Login Registrati
                                        Stai vedendo 19 articoli - dal 1 a 19 (di 19 totali)
                                        Rispondi a: Formattazione delle celle e del testo
                                        Gli allegati sono permessi solo ad utenti REGISTRATI
                                        Le tue informazioni: