fORMATO DIMENSIONE CARATTERE
Hai un problema con Excel? 
fORMATO: DIMENSIONE CARATTERE
di Toscanaccio (utente non iscritto) data: 12/09/2016 16:11:33
Salve a tutti!
Mi domandavo se, così come si può fare con i colori, nella stessa cella possono "convivere" dimensione di caratteri diversi.
Mi spiego: in una colonna formattata a valuta €, Carattere Arial 10 ho messo la terza cifra decimale, ma vorrei che fosse in arial 8 o pendice. E' possibile?
Se la cella non è in € ma formato generale fino a che non si digita l'invio per salvare il dato della cella la terza cifra decimale appare effettivamente come desidero, ma una volta salvata, la cella riacquista il formato univoco per tutti i caratteri.
Posso farlo che voi sappiate?
Grazie, Massimo
di Vecchio Frac data: 12/09/2016 21:00:02
cit. "se, così come si può fare con i colori, nella stessa cella possono "convivere" dimensione di caratteri diversi. "
---> Non ti resta che provare ma la risposta è sì :)
Digita qualcosa in cella, conferma con invio, edita la cella, seleziona un certo numero di caratteri, cambiane la forma, il colore, la dimensione, et voila.
di Toscanaccio (utente non iscritto) data: 14/09/2016 09:53:55
Vecchio Frac, ti ringrazio per la risposta!
Evidentemente non mi sono spiegato bene:
allego un esempio. Quello che cerco è un formato personalizzato in cui il millesimo risulti più piccolo, un po' come fanno le insegne dei benzinai. Quindi: simbolo €, separatore di migliaia, virgola dei decimali e 3 decimali.
Grazie.
Massimo
di alfrimpa data: 14/09/2016 12:51:00
Ciao Massimo
Intanto potresti provare con la macro che vedi sotto tenendo presente che le celle devono essere formattate a "Testo" diversamente (a meno che non sbagli qualcosa io) non funziona.
Può essere un primo spunto che poi vediamo di migliorare.
Alfredo
Sub Macro1()
Dim lung As Integer
lung = Len(ActiveCell)
With ActiveCell.Characters(Start:=lung, Length:=1).Font
.Name = "Calibri"
.FontStyle = "Normale"
.Size = 8
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
End Sub |
di Toscanaccio (utente non iscritto) data: 14/09/2016 13:19:59
Ciao Alfredo!
Purtroppo da
.ThemeColor = xlThemeColorLight1
Mi dà errore, non mi stupirei se fosse una questione di versione dal momento che ho excel 2000.
Come dici tu può essere un primo spunto anche se, sinceramente, preferirei se fosse possibile, utilizzare un formato personalizzato piuttosto che dover lanciare una macro per vedere il risultato. Hai giustamente sottolineato che funziona in formato testo. Mi domando quando si creano formati personalizzati se inserisco il simbolo dell'€ automaticamente esce dal formato testo (anche se personalizzato)? Utilizzare un qualcosa tipo destra(a1;1) per identificare la cifra da formattare diversamente è impensabile?
Grazie , rimango comunque sempre curioso degli escamotage che la mente umana riesce a trovare per superare i problemi...
Massimo
di alfrimpa data: 14/09/2016 13:59:21
Ciao Massimo
Ho provato a togliere l'istruzione .ThemeColor = xlThemeColorLight1 e la macro funziona lo stesso; prova a farlo anche tu.
Quanto ai formati non li ho mai frequentati molto per cui ne so poco.
Per automatizzare ho provato ad inserire il codice della macro in una routine Worksheet_Change ma non funziona e non capisco il perché
Alfredo
di alfrimpa data: 14/09/2016 14:15:14
Massimo prova questa da inserire nel modulo del foglio interessato; non so se era questo quello che volevi ottenere.
Tengo a precisare che ho ricevuto valido e spero risolutivo aiuto da due amici di altro forum (Baloon_50 e Marius44)
Alfredo
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("a1:a1000")) Is Nothing Then
Dim lung As Integer
If Target.Rows.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
On Error Resume Next
lung = Len(Target)
Application.EnableEvents = False
Target.Value = "€ " & Target.Value
With Target.Characters(Start:=lung + 2, Length:=1).Font
.Name = "Calibri"
.FontStyle = "Normale"
.Size = 8
End With
Application.EnableEvents = True
End If
End Sub
|
di alfrimpa data: 14/09/2016 16:02:06
Grazie all'ottimo contributo di scossa ti propongo la macro che vedi sotto che evita il dover formattare le celle a "Testo".
La macro funziona per il range "A1:A1000" modificalo secondo le tue esigenze.
Alfredo
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lung As Integer, nPos As Long
If Not Intersect(Target, Range("a1:a1000")) Is Nothing Then
With Target
If .Cells.Count = 1 And .Value <> vbNullString Then
Application.EnableEvents = False
.Value = Format(.Value, "€ #,##0.00")
Application.EnableEvents = True
lung = Len(.Value)
nPos = InStr(1, .Value, ",")
If nPos > 0 Then
.Characters(Start:=lung, Length:=1).Font.Size = 8
Else
.Font.Size = 11
End If
End If
End With
End If
End Sub |
di scossa data: 14/09/2016 16:35:13
cit. Toscanaccio: "Quello che cerco è un formato personalizzato in cui il millesimo risulti più piccolo"
Visto che vuoi 3 decimali serve una leggera modifica al codice.
Inoltre per sommare i valori in A meglio usare:
=SOMMA(SE.ERRORE(--SOSTITUISCI(A1:A20;"€ "; "");0))
matriciale.
| scossa's web site |
| Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lung As Integer, nPos As Long
If Not Intersect(Target, Range("a1:a1000")) Is Nothing Then
With Target
.NumberFormat = "@"
If .Cells.Count = 1 And .Value <> vbNullString Then
Application.EnableEvents = False
.Value = Format(.Value, "€ #,##0.000")
Application.EnableEvents = True
lung = Len(.Value)
nPos = InStr(1, .Value, ",")
If nPos > 0 Then
'.Characters(Start:=nPos, Length:=3).Font.Size = 8
.Characters(Start:=lung, Length:=1).Font.Size = 8
Else
.Font.Size = 11
End If
End If
End With
End If
End Sub
|
di alfrimpa data: 14/09/2016 17:34:33
Marco grazie anche da qui
Alfredo
di Toscanaccio (utente non iscritto) data: 14/09/2016 19:13:07
Intanto grazie a tutti coloro che hanno speso il loro tempo ed intelletto per aiutarmi!
Dopo le prime prove sembra funzionare.!
Le perplessità mi rimangono in quanto il foglio 1 è protetto. Ho aggiunto unprotect ad inizio e protect alla fine della vostra macro e va bene
Il problema nasce dal momento in cui altre macro lavorano sullo stesso foglio e dopo aver tolto la protezione per conto loro, siccome coinvolgono le celle interessate dalla vostra macro, non riecono a proseguire perchè il foglio viene nuovamente protetto in fondo alla vostra macro.
Mi domando allora:
esiste un comando che quando avvio la macro1 disattiva la
Private Sub Worksheet_Change(ByVal Target As Range) nel foglio 1
bypassandola e la riattiva come ultima cosa prima di terminare?
Grazie, Massimo
di Toscanaccio (utente non iscritto) data: 14/09/2016 19:15:44
P.S.: anche per questo se riuscissi a fare il tutto con una formattazione personalizzata piuttosto che con una macro sarebbe tutto più semplice
di scossa data: 14/09/2016 19:34:24
Cerca in google "Excel VBA UserInterfaceOnly"
Il primo risultato:
mi sembra già risolutivo: w w w .excelvba.it/Forum/reply.php?f=1&t=11042
| scossa's web site |
Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
di Toscanaccio (utente non iscritto) data: 14/09/2016 20:07:32
Sono proprio imbranato!
Scusa Scossa: ho inserito
"Excel VBA UserInterfaceOnly"
Sia sulla ricerca che c'è a piè di pagina in questo forum , sia in google, ma la pagina che mi hai descritto come risultato non salta fuori.
Ho provato ad inserire direttamente la pagina, ma ugualmente senza successo
Che devo fare?
Grazie, Massimo
di alfrimpa data: 14/09/2016 20:28:35
Ma hai tolto gli spazi in w w w .?
di Toscanaccio (utente non iscritto) data: 14/09/2016 20:49:27
Yes, spazi tolti
Stavo analizzando bene il problema: la situazione è questa
La macro 1 lavora sul foglio 1 che non è protetto ed arriva qui:
Range("A2:O2").Select '(Vd.VBA)
Stavo riflettendo che forse non è un problema di protezione bensi di altro tipo: infatti da problema di
run-time 13 tipo non corrispondente.
Scusate: devo aver mal interpretato il motivo per cui si bloccava.
Davvero mi cospargo il capo di cenere
Massimo
Range("A2:O2").Select
Selection.Copy
Range("UltimaA:O2").Select
'qui si inserisce la Private Sub Worksheet_Change(ByVal Target As Range)
' una colta avviata si blocca a
' If .Cells.Count = 1 And .Value <> vbNullString Then
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False |
di Toscanaccio (utente non iscritto) data: 20/09/2016 08:47:31
Buongiorno a tutti in particolar modo ad Alfredo, Scossa e Vecchio Frac che già sono entrati in questa discussione!
Ho tentato di adattare il codice che mi avete fornito e che fa egregiamente il suo dovere, alle mie esigenze. Probabilmente però non avendone capito bene tutte le istruzioni non ci sono riuscito e vi chiedo di avere nuovamente la pazienza di aiutarmi.
Vorrei togliere la macro dal foglio 1 e svincolarla da un'evento change immettendola semplicemente in un modulo per poterla lanciare a mio piacimento allo scopo di formattare il range j2:ultimaj.
A questo punto se fosse possibile oltre che con un font.size 8 anche con un grigio 50%.
Ho provato a farlo ma invano.
Rilancio allora la discussione per vedere se ne venite a capo.
Grazie, Massimo
di scossa data: 22/09/2016 11:25:30
cit. Toscanaccio: "Rilancio allora la discussione per vedere se ne venite a capo. "
Ciao,
dovresti allegare il file con quello che hai fatto .....
| scossa's web site |
Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
di Toscanaccio (utente non iscritto) data: 22/09/2016 18:38:08
Come da gentile richiesta allego il file depurato e semplificato.
La colonna incriminata è la I.
In alto ci sono delle celle come desiderate (a parte il colore del millesimo) che sono il frutto della macro che Scossa aveva postato e che funzionava (egregiamente) su un'evento change del foglio 1.
La macro l'ho spostata sul modulo 6 nelle 2 versioni: così come era stata pubblicata e come l'avevo rinominata io sperando potesse partire da lì.
Desidererei venisse lanciata così come descritto nella macro "Azzera" del modulo 1 alla riga 85.
Già che ci sono chiedo anche questo:
Il bottone 1 del foglio 2 (Caption: CHIUDI) non funziona quando è nella nuova finestra "conteggio.xls:2" (che viene attivata dal bottone "Increm. sconto" del foglio 1)
Avevo messo questo pulsante perchè non ero riuscito ad attivare la macro "UscitaFoglio2" sull'evento di chiusura della finestra: se invece si può fare in questo modo tanto meglio, tolgo il pulsante semplificando tutto, altrimenti come farlo funzionare?
Immagino che invece che usare una nuova finestra avrei potuto usare una user form ma non ho molta dimestichezza con questo strumento e tantomeno con la sua grafica e sicuramente avrei impiegato moooolto più tempo per cercare di fare un qualcosa che mi soddisfacesse.
Grazie di cuorea tutti,
Massimo
di scossa data: 23/09/2016 14:07:55
Ciao,
durante il week-end, se nessuno risponde prima, vedrò di aiutarti.
| scossa's web site |
Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
di scossa data: 24/09/2016 15:19:15
Ho guardato il tuo file ma non sono sceso nel dettaglio perché è un po' troppo "incasinato".
Comunque sotto trovi la sub EuroMillesimi() modificata per funzionare lanciandola dopo avere selezionato le celle da formattare.
| scossa's web site |
| Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
Sub EuroMillesimi() 'Come speravo potesse funzionare da Modulo 6
'GoTo Fine
Dim target As Range, cella As Range, ws As Worksheet
Dim lung As Integer, nPos As Long
Set target = Selection.Cells
Set ws = target.Parent
ws.Unprotect
If Not Intersect(target, ws.Range("i2:UltimaI")) Is Nothing Then
For Each cella In target.Cells
With cella
.NumberFormat = "@"
If .Cells.Count = 1 And .Value <> vbNullString Then
Application.EnableEvents = False
.Value = Format(.Value, "€ #,##0.000")
Application.EnableEvents = True
lung = Len(.Value)
nPos = InStr(1, .Value, ",")
If nPos > 0 Then
'.Characters(Start:=nPos, Length:=3).Font.Size = 8
.Characters(Start:=lung, Length:=1).Font.Size = 8
Else
.Font.Size = 11
End If
End If
End With
Next cella
End If
ws.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
'Fine:
End Sub |
di Toscanaccio (utente non iscritto) data: 24/09/2016 17:51:16
Wow, che meraviglia
Confido che tu o chiunque altro quando avrete tempo e voglia potrete dare risposta anche alle altre mie necessità (colore del millesimo e funzionamento della macro "uscitaFoglio2").
Intanto grazie per la preziosa collaborazione!
cIAO, Massimo
di Toscanaccio (utente non iscritto) data: 24/09/2016 19:13:14
Scusate! Eccomi di nuovo!
Il colore del millesimo l'ho risolto basandomi sulla macro di Scossa e scartabellando un po' su internet !
Rimane il problema della macro "UscitaFoglio2"
Buona serata,
Massimo
di Toscanaccio (utente non iscritto) data: 27/09/2016 18:45:52
Salve a tutti!
Resuscito la discussione del mio progetto al quale nel frattempo ho lavorato.
Nell'ultimo post che ho mandato avevo fatto praticamente confluire anche la discussione " Codice su chiusura foglio" (thread.php?f=1&t=11053) che mi ha creato non pochi grattacapi ma che in qualche modo, sono sicuro non ortodosso, ho risolto. Aspetto le bacchettate dai puristi che saranno ben accette in modo che possa imparare qualcosa di più. Il risultato è esattamente quello che mi proponevo. L'ultima chicca sarebbe presentare la colonna I (che è stata oggetto del lavoro di scossa) non in formato euro, ma in formato contabilità, come sono le altre colonne, ma mantenendo la peculiarità del terzo decimale più piccolo ed in grigio.
Allego il codice di Scossa a cui avevo sostituito
.Value = Format(.Value, "€ #,##0.000") con
.Value = Format(.Value, "_-€*#.##0,000_-;-€*#.##0,000_-;_-€*" - "??_-;_-@_-")
Il formato l'ho preso dalla personalizzazione dei formati di excel, ma probabilmente nel vba non è il medesimo: ad es. il vba in automatico mi mette lo spazio prima e dopo il meno della terza sezione portando il formato da così
=> "-" <= a così => " - " <=
Qualcuno sa aiutarmi per quest'ultima rifinitura?
Grazie, Massimo
Sub EuroMillesimi() 'Come speravo potesse funzionare da Modulo 6
'GoTo Fine
Dim target As Range, cella As Range, ws As Worksheet
Dim lung As Integer, nPos As Long
Set target = Selection.Cells
Set ws = target.Parent
ws.Unprotect
If Not Intersect(target, ws.Range("i2:UltimaI")) Is Nothing Then
For Each cella In target.Cells
With cella
.NumberFormat = "@"
If .Cells.Count = 1 And .Value <> vbNullString Then
Application.EnableEvents = False
'.Value = Format(.Value, "_-€*#.##0,000_-;-€*#.##0,000_-;_-€*" - "??_-;_-@_-")
.Value = Format(.Value, "€ #,##0.000")
Application.EnableEvents = True
lung = Len(.Value)
nPos = InStr(1, .Value, ",")
If nPos > 0 Then
'.Characters(Start:=nPos, Length:=3).Font.Size = 8
.Characters(Start:=lung, Length:=1).Font.Size = 8
.Characters(Start:=lung, Length:=1).Font.ColorIndex = 16
Else
.Font.Size = 11
End If
End If
End With
Next cella
End If
End Sub
|
di Toscanaccio (utente non iscritto) data: 27/09/2016 19:13:02
P.S.: Scordavo di dirvi che
- ho riallegato il file aggiornato
- Se provo ad inserire il formato nuovo a sostituire quello di scossa mi da:
Errore di run-time '13':
Tipo non corrispondente.
Preciso che mi ero premurato prima di sostituire manualmente la formattazione dei dati della col. I in modo che la routine li trovasse giustamente formattati come li cercava (Ma ovviamente con il terzo decimale "grande" e con il medesimo colore".
Ora vi riallego anche il file così formattato
Massimo
di scossa data: 27/09/2016 19:52:34
cit.: "Se provo ad inserire il formato nuovo ..."
mi spieghi cosa dovrebbe rappresentare questo formato:
.Value = Format(.Value, "_-€*#.##0,000_-;-€*#.##0,000_-;_-€*" - "??_-;_-@_-")
| scossa's web site |
| Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
di Toscanaccio (utente non iscritto) data: 27/09/2016 21:03:46
Ciao Scossa e... grazie per l'interessamento.
Intanto devo dire che quando si tratta di variabili io mi perdo e non riesco a capire a fondo ciò che inviate. Spesso vado per tentativi cercando di interpretare ciò che viene scritto.
Origine del formato:
Ho inserito dati in una cella di un nuovo foglio, sono andato su formatta cella e l'ho formattato in contabilità con 3 decimali, poi sempre da formato celle sono andato su personalizzato e nella finestra "tipo" è comparso quel codice che evidentemente è quello che excel usa quando formatta a contabilità.
So però che non di rado l'ortografia di excel differisce da quella del vba...
Come vedi è tutto molto empirico, anche le macro che vedi, che immagino ti faranno inorridire, le ho scritte facendo collage, elaborando escamotage per funzioni che probabilmente posso essere scritte più lineari e semplici, se solo io conoscessi meglio il vba.
Non faccio fatica a capire quando mi dici che il file è "incasinato"
Ciao, grazie,
Massimo
di scossa data: 28/09/2016 09:19:48
cit.: "Ho inserito dati in una cella di un nuovo foglio, sono andato su formatta cella e l'ho formattato in contabilità con 3 decimali, poi sempre da formato celle sono andato su personalizzato e nella finestra "tipo" è comparso quel codice che evidentemente è quello che excel usa quando formatta a contabilità"
Attenzione a non confondere la funzione Format(), che restituisce una stringa, con la proprietà NumberFormat, che si limita solo a formattare la rappresentazione del valore nella cella senza alterare il valore stesso.
| scossa's web site |
| Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
di Toscanaccio (utente non iscritto) data: 01/10/2016 08:35:30
Ho passato questi gg. a comprendere la differenza senza in realtà capirne il profondo significato.
Ma, in soldoni, si può ottenere ilrisultato da me richiesto?
Nel frattempo ho continuato ad affinare il file cercando di utilizzare anche una worksheet_change del foglio 1, ma non ho trovato soluzione alla seguente riga di confronto:
if target.value= sheets("foglio2").range("N2").value then...
ho provato svariate "combinazioni ortografiche" risultate però tutte infruttuose!
Come confrontare dunque il target con il dato di un'altro foglio?
Ed ancora: ho cercato di adattare al mio caso questa cosa trovata su internet:
Codice:
CUT
Dim ultC As Long
ultC = Sheets("Foglio1").Range("C" & Rows.Count).End(xlUp).Row
For Each CL In Range("C1:C" & ultC)
CUT
Ma ugualmente non gira non riconosce la fine dal range. Può essere che sia perché ho la ver. 2000?
Allego comunque i 2 codici nello spazio vba.
Grazie.
Massimo
if target.value= sheets("foglio2").range("N2").value then...
CUT
Dim ultC As Long
ultC = Sheets("Foglio1").Range("C" & Rows.Count).End(xlUp).Row
For Each CL In Range("C1:C" & ultC)
CUT |
di Toscanaccio (utente non iscritto) data: 01/10/2016 20:02:00
Buonasera a tutti!!!
Dunque:
1) Per il range delimitato con il .End(xlUp) ho risolto
2) per il confronto con il target quasi...
Ho creato una variabile:
Dim risultato As Long
risultato = Sheets("foglio2").Range("v1").Value
risultato = Format(risultato, "Currency")
e poi confrontato
If Target <> risultato Then,
Ma nonostante abbia provato a formattarlo il numero che considera per il confronto è sempre intero, mentre spesso risultato ha decimali.
Come risolvere questo problema?
3) E poi rimane il problema originale della formattazione della cella con 3 decimali allo stile contabilità
Aspetto fiducioso i vostri consigli.
Grazie Massimo
di Toscanaccio (utente non iscritto) data: 03/10/2016 13:27:52
Allora, vi aggiorno:
Ho risolto anche il problema 2) impostando
Dim risultato as currency (Era semplice ma dovevo scoprirlo...)
Rimane il punto 3)
nel modificare la macro di Scossa mi sto avviando in questa direzione:
- Togliere al formato il simbolo €,
- sapendo che la lunghezza totale della stringa che voglio ottenere è 16 e sapendo qual'è il valore della variabile lung
scrivere una cosa tipo... (ma non so come scriverlo)
If Len(Target) < 16 Then
target si trasforma in
"€ "& tanti spazi quanto è 14-lung & target
14 perchè ad inizio della stringa ho aggiunto i 2 caratteri "€ " che mi portano il totale della lunghezza a 16.
Vi sembra che possa essere la strada giusta?
Per favore mi aiutate a scriverla che, come vi ho detto non mastico molto di funzioni, target e variabili?
Grazie,
Massimo
di Toscanaccio (utente non iscritto) data: 03/10/2016 13:41:03
Esistono, dunque, caratteri di riempimento in vba?
Muble, muble... oppure, altra soluzione...
sarebbe possibile allineare da vba il simbolo € a sinistra ed il resto della stringa a dx, il che renderebbe il risultato grafico probabilmente più preciso, ma in questo, ammesso che fosse possibile, come dovrebbe essere la formattazione dell'allineamento della cellula di destinazione? Sarebbe ininfluente?
AriGrazie, Massimo
Vuoi Approfondire?