Risultati da 1 a 7 di 7

Discussione: Gestione Response da InputBox



  1. #1
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    31
    Messaggi
    40
    Versione Office
    2010
    Mi Piace ricevuti
    1

    Lightbulb Gestione Response da InputBox

    Buonasera a tutti,

    cerco qualche suggerimento in merito alla gestione delle Response su una input box inserita. Ho sempre definito come string la variabile che necessito inserire, tuttavia, nel caso di mia necessità, il dato che devo inserire è un orario, nel formato hh.mm per poi successivamente effettuare una differenza tra orari.

    Ora, nel momento in cui definisco le variabile Data1 e Data2 come Date, non ho nessun problema, nè sulla differenza tra gli orari e nemmeno sul controllo del formato, attraverso il seguente codice:

    Codice: 
    restart:
    stringa = InputBox("Inserire valore")
    If IsDate(TimeSerial(Val(Left(stringa, 2)), Val(Mid(stringa, 4, 2)), Val(Right(stringa, 2)))) And InStr(3, stringa, ":") = 3 And InStr(6, stringa, ":") = 6 Then
    ...
    eseguo codice
    ...
    Else
    MsgBox "Errore. Formato sbagliato"
    GoTo restart
    End If
    So che la pressione del tasto OK (senza aver inserito alcun valore) equivale alla pressione del tasto Annulla e, se non ricordo male, dovrebbe restituire il valore 0, qualore la variabile venisse definita come String.
    Ma essendo in formato Date, tale valore assume automaticamente 00:00:00

    So che per i MsgBox esistono i valori da 1 a 7 per gestire Ok, Abort, Cancel, Retry, ecc ecc.. Stesso discorso è valido anche per Inputbox? Avete altre idee o alternative in merito?

    Vi ringrazio anticipatamente e vi auguro un buon weekend.

  2. #2
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    573
    Versione Office
    2010 64bit
    Mi Piace ricevuti
    95
    Mi Piace dati
    32

    Re: Gestione Response da InputBox

    Con l'esempio che hai riportato la pressione dell' Ok o Invio o Annulla e con il campo vuoto, anche inizializzando la variabile "stringa" come String, la macro s'instrada correttamente verso l' Else ovvero il Msgbox d'errore.

  3. #3
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    31
    Messaggi
    40
    Versione Office
    2010
    Mi Piace ricevuti
    1

    Re: Gestione Response da InputBox

    Ciao rollis,

    ti ringrazio per la risposta. Credo di essermi in effetti spiegato male.. Chiedo venia. Supponiamo i due 2 casi:

    Caso 1: var stringa in formato Date
    - inserisco le 22.30 -> Esegue codice OK
    - inserisco le 26.89 -> Errore OK
    - inserisco 0 -> Esegue codice SBAGLIATO
    - lascio campo vuoto -> Errore run-time '13'
    - premo annulla -> Errore run-time '13'

    Caso 2: var stringa in formato String
    - inserisco le 22.30 -> Errore SBAGLIATO
    - inserisco le 26.89 -> Errore SBAGLIATO
    - inserisco 0 -> Errore OK
    - lascio campo vuoto -> Errore OK
    - premo annulla -> Errore OK

    Il mio obiettivo è fare, a seguito dei controlli, una differenza tra un orario presente in una cella specifica e l'orario che inserisco tramite inputbox ed è il motivo per il quale ho definito le variabili as Date. Per cui presupponendo di lasciarle in formato Date, dato che effettivamente il controllo funziona, mi chiedevo se c'era modo di gestire le altre 3 sotto-casistiche del Caso 1 oppure se qualcuno ha un suggerimento alternativo su come poter fare

    Attendo preziosissimi consigli...

  4. #4
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    72
    Messaggi
    1566
    Versione Office
    Excel2007
    Mi Piace ricevuti
    399
    Mi Piace dati
    100

    Re: Gestione Response da InputBox

    Ciao
    Premesso che, ormai dovresti saperlo, è sempre meglio allegare un file, secondo me la soluzione potrebbe essere la gestione del Response adattando il Type = 1 (cioè valore numerico) e quindi valutare se è compreso (visto che gli orari sono la parte decimale di un numero seriale) tra 0 e 1.
    Non ho provato tutta la tua casistica ma tu saprai adattare (come pure inserire Option Explicit e dichiarare le variabili) questa macro:
    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Cells(1, 1)) Is Nothing Then
        myvalue = Application.InputBox("Inserire orario in formato ' hh.mm.ss '", Type:=1)
        If myvalue < 0 Or myvalue >= 1 Then
            MsgBox "Il valore immesso è errato"
            Cells(1, 2) = "": Exit Sub
        Else
            Cells(1, 2) = myvalue
        End If
    End If
    End Sub
    Prova e fai sapere. Ciao,
    Mario

  5. #5
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    573
    Versione Office
    2010 64bit
    Mi Piace ricevuti
    95
    Mi Piace dati
    32

    Re: Gestione Response da InputBox

    In realtà il test effettuato con l' If/Then si aspetta un input di tipo 10:20:35 (con una copia di due punti); forse è questo che va rivisto.

  6. #6
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    72
    Messaggi
    1566
    Versione Office
    Excel2007
    Mi Piace ricevuti
    399
    Mi Piace dati
    100

    Re: Gestione Response da InputBox

    @rollis13
    Ciao Rolando
    ci siamo accavallati. Scusami. Potresti provare la mia macro, anche con un punto di separazione?
    Grazie e ciao,
    Mario

  7. #7
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    31
    Messaggi
    40
    Versione Office
    2010
    Mi Piace ricevuti
    1

    Re: Gestione Response da InputBox

    Buongiorno a tutti,

    chiedo scusa per il ritardo nella mia risposta. Ho provato la macro fornita da Marius, ma non sono riuscito ad adattarla. Ho provato a gestire il tutto tramite stringhe e non tramite date/orari/valori.

    E sorprendentemente sono riuscito con controlli sui controlli su altri controlli ancora, considerando sempre che al termine di tutto necessitavo di fare una differenza tra orari, a far funzionare il tutto.

    In altre parole, ho fatto tutti i controlli su stringhe, e una volta entrati nel ciclo corretto, ho convertito con CDate le due variabili per poter fare la differenza che mi serviva:

    Ecco qui il codice:

    Codice: 
    Sub Pulsante1_Click()
    
    
    Dim myTimeString As String
    Dim myTimeinsert As String
    
    
    Dim intHours As Integer
    Dim intMinutes As Integer
    Dim intSeconds As Integer
    
    
    myTimeString = Range("B6").Text 'in questo caso uso un esempio (ed uso .text dal momento che si tratta di una stringa e la cella è in formato General) ma myTimeString può anche essere preso da Inputbox come seguirà
    
    
    myTimeString = Trim(Replace(Replace(Replace(myTimeString, " ", ""), _
        ",", ""), "seconds", ""))
    
    myTimeString = Replace(Replace(myTimeString, "minutes", ":"), "hours", ":")
    
    
    myTimeString = CDate(myTimeString) 'converto la stringa in formato Date dal momento che è un dato definito.
    restart:
    myTimeinsert = InputBox("Inserire Orario nel formato HH.MM") 'chiedo un inserimento dei dati,  anche in questo caso si tratta di stringa
    
    
    If myTimeinsert = "" Then 'controlla se stringa vuota e gestisce tutte le casistiche quindi gestione OK senza dati - TASTO ANNULLA - X in alto a DX
        MsgBox "Errore. Nessun dato inserito"
    Else
    myTimeinsert = CDate(myTimeinsert) 'una volta appurato che la inputbox NON è VUOTA, converto la stringa in formato Date
    'a questo punto e SOLO a questo punto, partono tutti i controlli sulla formattazione del valore inserito, ma in formato Date
    
    If IsDate(TimeSerial(Val(Left(myTimeinsert, 2)), Val(Mid(myTimeinsert, 4, 2)), Val(Right(myTimeinsert, 2)))) And InStr(3, myTimeinsert, ":") = 3 And InStr(6, myTimeinsert, ":") = 6 Then 'ne controlla la lunghezza/formato 
    
                        intMinutes = DateDiff("n", myTimeString, myTimeinsert)
                        intHours = intMinutes \ 60
                        intMinutes = intMinutes Mod 60
    
                        intSeconds = DateDiff("s", myTimeString, myTimeinsert)
                        intHours = intSeconds \ 3600
                        intMinutes = intSeconds \ 60 Mod 60
                        intSeconds = intSeconds Mod 60
    
                        strDiff = CStr(intHours) & ":" & CStr(intMinutes)
                        Range("F7").Value = strDiff 
    Else
    MsgBox "Errore nel formato inserito. Si prega di inserire nel formato HH.MM" 'Se quindi il formato è sbagliato, msgbox di errore sul FORMATO inserito
    GoTo restart:
    End If
    
    
    End If
    End Sub

Discussioni Simili

  1. [Risolto] gestione magazzino
    Di luciano1966 nel forum Domande su Excel in generale
    Risposte: 39
    Ultimo Messaggio: 07/11/16, 13:33
  2. Gestione ordini
    Di igorvpa nel forum Domande su Excel VBA e MACRO
    Risposte: 4
    Ultimo Messaggio: 15/10/16, 17:29
  3. Gestione di un DB
    Di Bellared nel forum Domande su Excel in generale
    Risposte: 5
    Ultimo Messaggio: 26/09/16, 11:27
  4. Gestione Nomi
    Di chefmaxim nel forum Domande su Excel in generale
    Risposte: 4
    Ultimo Messaggio: 12/05/16, 10:27
  5. informazione su inputBox
    Di dpg70 nel forum Domande su Excel VBA e MACRO
    Risposte: 7
    Ultimo Messaggio: 29/03/16, 00:16

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •