Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Excel 2013 - "blindare" inserimento ore in celle excel

  1. #1
    stige non è in linea Scolaretto
    Post
    185
    Like Inviati  
    4
    Like Ricevuti  
    0
    Buon giorno a tutti,

    spero di aver aperto il post correttamente

    Devo trasmettere dei form da far compilare mensilmente e vorrei che nelle colonne delle ore, gli utenti abbiano gli inserimenti blindati senza bloccare la possibilità di inserire righec colonne o la formattazione delle celle.

    In pratica qualunque inserimento venga fatto deve essere riportato in forma oraria.

    ho trovato e cercato di adattare questa routine che funziona benissimo quando vengono inseriti valori con il punto o con la virgola perché riporta il valore in formato orario, ma crea problemi quando viene inserito il formato corretto con i ":".

    faccio un esempio:

    13.15 riporta 13:15
    13,15 riporta 13:15
    13:15 riporta 00:55

    la routine che utilizzo è la seguente:

    Codice PHP:
    Private Sub Worksheet_Change(ByVal Target As Range)
       
       
    Sheets(1).Activate
       
       Columns
    ("A:A").NumberFormat "dd/mm/yyyy"
       
    Columns("b:b").NumberFormat "[h]:mm;@"
       
    Columns("c:c").NumberFormat "[h]:mm;@"
       
    Columns("D:D").NumberFormat "[h]:mm;@"
       
       
    Application.EnableEvents True
       
       
    If Intersect(TargetRange("b2:c200")) Is Nothing Then Exit Sub
          On Error Resume Next
          Application
    .EnableEvents False
          
          Cells
    .Replace What:="."Replacement:=","LookAt:=xlPartSearchOrder _
          
    :=xlByRowsMatchCase:=FalseSearchFormat:=FalseReplaceFormat:=False
              
          Cells
    (Target.RowTarget.Column) = Fix(Target.Value) / 24 + (Target.Value Fix(Target.Value)) / 14.4
          Cells
    (Target.RowTarget.Column).NumberFormat "[hh]:mm;@"
          
    Application.EnableEvents True
     
    End Sub 
    Potreste aiutarmi ? ho pochissime conoscenze di vba e questa procedura mi semplificherebbe di molto le mie attività

    grazie

  2. #2
    Sgrubak non è in linea Scribacchino
    Post
    602
    Like Inviati  
    11
    Like Ricevuti  
    14
    Andiamo per ordine:
    1)L'evento Change viene scatenato ad ogni modifica dei valori nelle celle. Ne consegue che attivare il primo foglio e modificare il formato delle prime 4 colonne, non va in questo evento.

    2) Il primo Application.EnableEvents deve essere settato a False, altrimenti vai in loop infinito quando modifichi i valori. Come tu faccia ad affermare che funziona benissimo, mi lascia perplesso...

    3)Il Cells.Replace agisce sull'intero foglio. Un po' esagerato a mio avviso.

    Bada che per Excel le date e gli orari, in realtà son numeri. Cambia solo la maniera in cui li mostra a video. Purtroppo non mi è chiaro cosa tu voglia ottenere... L'operatore inserisce 13.25 ore lavorate e tu vuoi vedere "13:15"?

    P.s: sei nella sezione sbagliata. Questo post andrebbe sotto Excel. Attendi che un moderatore sposti la discussione.

  3. #3
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    3,135
    Like Inviati  
    5
    Like Ricevuti  
    5
    spero di aver aperto il post correttamente
    Perché limitarsi a sperarlo? Sposto nella sezione Excel.
    ℹ️ Leggi di più su Brontolo ...

  4. #4
    stige non è in linea Scolaretto
    Post
    185
    Like Inviati  
    4
    Like Ricevuti  
    0
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Andiamo per ordine:
    1)L'evento Change viene scatenato ad ogni modifica dei valori nelle celle. Ne consegue che attivare il primo foglio e modificare il formato delle prime 4 colonne, non va in questo evento.

    2) Il primo Application.EnableEvents deve essere settato a False, altrimenti vai in loop infinito quando modifichi i valori. Come tu faccia ad affermare che funziona benissimo, mi lascia perplesso...

    3)Il Cells.Replace agisce sull'intero foglio. Un po' esagerato a mio avviso.

    Bada che per Excel le date e gli orari, in realtà son numeri. Cambia solo la maniera in cui li mostra a video. Purtroppo non mi è chiaro cosa tu voglia ottenere... L'operatore inserisce 13.25 ore lavorate e tu vuoi vedere "13:15"?

    P.s: sei nella sezione sbagliata. Questo post andrebbe sotto Excel. Attendi che un moderatore sposti la discussione.
    grazie dell'attenzione, si è esatto io vorrei che qualunque cosa venga inserito, considerato che l'inserimento è sempre riferito ad un valore orario, venga presentato con il formato orario comprensivo dei ":" adesso la mia routine funziona solo con il "." o la "," ma vorrei che inserendo l'orario in formato corretto non avvengano cambiamenti.

  5. #5
    stige non è in linea Scolaretto
    Post
    185
    Like Inviati  
    4
    Like Ricevuti  
    0
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    Perché limitarsi a sperarlo? Sposto nella sezione Excel.
    il dubbio di spiegarsi male rimane sempre , grazie per aver spostato il report nella sezione corretta

  6. #6
    Sgrubak non è in linea Scribacchino
    Post
    602
    Like Inviati  
    11
    Like Ricevuti  
    14
    Quote Originariamente inviato da stige Visualizza il messaggio
    si è esatto io vorrei che qualunque cosa venga inserito, considerato che l'inserimento è sempre riferito ad un valore orario, venga presentato con il formato orario comprensivo dei ":"
    Per quello ti basta verificare, come già fai, che il Target sia nel range che t'interessa, disabilitare gli eventi, effettuare il Target.Replace, riabilitare gli eventi.
    Tutto il resto del codice è da cancellare... Non serve a nulla. Nemmeno il ricalcolo con il Fix.

    Quote Originariamente inviato da stige Visualizza il messaggio
    ma vorrei che inserendo l'orario in formato corretto non avvengano cambiamenti.
    Quello è già cosi di default. Io ho fatto dei test e se inserisco nella cella (il cui formato è quello da te specificato, ossia [hh]:mm;@) il testo "13,25" mi mostra "13:15". Se inserisco "13:15" vedo "13:15" ma il valore è, giustamente "13,25". Con il Replace gestisci il caso in cui l'utente inserisca "13.15", così non lo vede come testo e sei a posto.
    Ultima modifica di Sgrubak; 14-01-2021 16:28 

  7. #7
    Marius44 non è in linea Scolaretto
    Post
    360
    Like Inviati  
    0
    Like Ricevuti  
    5
    Buon pomeriggio a tutti
    Dopo Application.EnableEvents prova a mettere una condizione splittando il valore inserito e come delimitatore ":"
    Se ci sono i due punti allora esci dall'evento.

    Ciao,
    Mario

  8. #8
    stige non è in linea Scolaretto
    Post
    185
    Like Inviati  
    4
    Like Ricevuti  
    0
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Per quello ti basta verificare, come già fai, che il Target sia nel range che t'interessa, disabilitare gli eventi, effettuare il Target.Replace, riabilitare gli eventi.
    Tutto il resto del codice è da cancellare... Non serve a nulla. Nemmeno il ricalcolo con il Fix.


    Quello è già cosi di default. Io ho fatto dei test e se inserisco nella cella (il cui formato è quello da te specificato, ossia [hh]:mm;@) il testo "13,25" mi mostra "13:15". Se inserisco "13:15" vedo "13:15" ma il valore è, giustamente "13,25". Con il Replace gestisci il caso in cui l'utente inserisca "13.15", così non lo vede come testo e sei a posto.
    proprio li vado a cadere purtroppo , ci ho provato in diversi modi ma la mia conoscenza è abbastanza basica e non riesco a venirne a capo, attualmente il punto o la virgola quando inseriti, vengono riconosciuti e trasformati nel ":", se però inserisco il valore orario con il formato "h:m" e quindi con il due punti, il risultato viene modificato.

    i miei tentativi di utilizzare il replace sono falliti abbastanza tristemente direi, come dovrei modificare la stringa del replace (se ho capito bene il suggerimento) per farla funzionare ?

  9. #9
    stige non è in linea Scolaretto
    Post
    185
    Like Inviati  
    4
    Like Ricevuti  
    0
    Quote Originariamente inviato da Marius44 Visualizza il messaggio
    Buon pomeriggio a tutti
    Dopo Application.EnableEvents prova a mettere una condizione splittando il valore inserito e come delimitatore ":"
    Se ci sono i due punti allora esci dall'evento.

    Ciao,
    Mario
    troppo oltre per me, ma grazie comunque

  10. #10
    Marius44 non è in linea Scolaretto
    Post
    360
    Like Inviati  
    0
    Like Ricevuti  
    5
    Ciao
    Se il codice cha postato è tuo, allora il mio suggerimento non è "troppo oltre" le tue conoscenze. Basta studiare la funzione SPLIT di VBA e applicarla. Prova e, al caso, scrivi specificando cosa non ti riesce di fare.

    Ciao,
    Mario

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Risposte: 1
    Ultimo Post: 30-11-2017, 17:28
  2. Risposte: 5
    Ultimo Post: 03-04-2014, 18:05
  3. [Excel] Macro aggiungi testo "xxx" in cella "A1"
    Da dighitosz nel forum Microsoft Excel
    Risposte: 3
    Ultimo Post: 26-02-2013, 08:40
  4. Risposte: 14
    Ultimo Post: 25-12-2012, 19:30
  5. Risposte: 11
    Ultimo Post: 02-10-2012, 15:51