Calcolo Giorni da VBA con InputBox

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
DRoberto
00mercoledì 6 aprile 2016 12:42
Buonasera !

Qui di seguito riporto un codice VBA con cui sto provando ad ottenere una differenza tra date per il calcolo dei giorni:

Sub Calcolo giorni()
Dim Data_di_nascita As Date
Dim Data_di_oggi As Date
Dim Giorni_vissuti As Single
Dim InputUtente As Date
Dim InputUtente2 As Date
InputUtente = InputBox("Data_di_nascita: ")
Cells(1, 2).Value = InputUtente
InputUtente2 = InputBox("Data_di_oggi: ")
Cells(2, 2).Value = InputUtente2
Giorni_vissuti = Data_di_oggi - Data_di_nascita
Cells(3, 2).Value = Giorni_vissuti
MsgBox Cells(3, 2).Value, , "Numero di giorni vissuti dalla nascita ad oggi"
End Sub

Questa istruzione non funziona, e dopo aver messo le date nelle celle indicate mi restituisce 0 come differenza tra le date.
Dov'è l'errore ?

Inoltre il risultato lo voglio come numero intero, per cui l'istruzione: Selection.NumberFormat = "#,##0"

dove può essere inserita ?
federico460
00mercoledì 6 aprile 2016 13:04
Ciao

Dim Data_di_nascita As Date
Dim Data_di_oggi As Date
Dim Giorni_vissuti As Single
Dim InputUtente As Date
Dim InputUtente2 As Date
InputUtente = InputBox("Data_di_nascita: ")
Cells(1, 2).Value = InputUtente
InputUtente2 = InputBox("Data_di_oggi: ")
Cells(2, 2).Value = InputUtente2
Giorni_vissuti = InputUtente2 - InputUtente
Cells(3, 2).Value = Giorni_vissuti
MsgBox Cells(3, 2).Value, , "Numero di giorni vissuti dalla nascita ad oggi"



in rosso dove era l'inghippo
DRoberto
00mercoledì 6 aprile 2016 13:47
Grazie per l'aiuto, adesso funziona.

DRoberto
00mercoledì 6 aprile 2016 14:10
Un'altra cosa. Vi chiedo di dirmi dove sta l'errore nel seguente VBA:

Sub CalcoloGiorni2()
Dim Data_di_nascita As Date
Dim Data_di_oggi As Date
Dim Nome As String
Dim Cognome As String
Dim GiorniVissuti As Single
Dim InputUtente As String
Dim InputUtente2 As String
Dim InputUtente3 As Date
Dim InputUtente4 As Date
InputUtente = InputBox("INSERISCI IL COGNOME: ")
Cells(1, 1).Value = InputUtente
InputUtente2 = InputBox("INSERISCI IL NOME: ")
Cells(1, 2).Value = InputUtente2
InputUtente3 = InputBox("INSERISCI LA DATA DI NASCITA: ")
Cells(1, 3).Value = InputUtente3
InputUtente4 = InputBox("INSERISCI LA DATA DI OGGI: ")
Cells(1, 4).Value = InputUtente4
GiorniVissuti = InputUtente4 - InputUtente3
Cells(1, 5).Value = GiorniVissuti
MsgBox Cells(1, 5).Value, , "NUMERO DI GIORNI VISSUTI DALLA NASCITA AD OGGI: "
Columns("A:A").EntireColumn.AutoFit
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

Con queste istruzioni dopo il primo inserimento alla riga 1, non riesco ad inserire ulteriori righi nelle righe successive.
Mi sovrascrive la riga 1. Eppure il riferimento relativo l'ho inserito => ActiveCell.Offset(1,0.Range("A1").Select
O forse questo va messo in altra posizione ?
Dove sta l'errore ?
rollis13
00mercoledì 6 aprile 2016 16:46
Non c'è un vero errore, sono le 4 righe tipo questa:
Cells(1, 1).Value = InputUtente
che fanno si che il successivo input vada a finire sempre nelle stesse celle. Devi far in modo che il primo numero che corrisponde alla riga si incrementi di volta in volta.
L'OffSet che hai inserito sposta si il cursore di 1 cella ma sempre partendo da A1 ma poi nella macro si torna a partire dalla cella (1,1) = A1.
federico460
00mercoledì 6 aprile 2016 17:17
Ciao


Sub CalcoloGiorni2()
Dim Data_di_nascita As Date
Dim Data_di_oggi As Date
Dim Nome As String
Dim Cognome As String
Dim GiorniVissuti As Single
Dim InputUtente As String
Dim InputUtente2 As String
Dim InputUtente3 As Date
Dim InputUtente4 As Date

Riga = 1 'si imposta il numero di una riga iniziale
While Cells(Riga, 1) <> "" 'fino a che la cella, numero Riga, colonna 1 (la A) è diversa da vuota, quindi occupata
Riga = Riga + 1 ' si incrementa di una unità il numero di Riga
Wend


InputUtente = InputBox("INSERISCI IL COGNOME: ")
Cells(Riga, 1).Value = InputUtente
InputUtente2 = InputBox("INSERISCI IL NOME: ")
Cells(Riga, 2).Value = InputUtente2
InputUtente3 = InputBox("INSERISCI LA DATA DI NASCITA: ")
Cells(Riga, 3).Value = InputUtente3
InputUtente4 = InputBox("INSERISCI LA DATA DI OGGI: ")
Cells(Riga, 4).Value = InputUtente4
GiorniVissuti = InputUtente4 - InputUtente3
Cells(Riga, 5).Value = GiorniVissuti
MsgBox Cells(Riga, 5).Value, , "NUMERO DI GIORNI VISSUTI DALLA NASCITA AD OGGI: "



Columns("A:A").EntireColumn.AutoFit
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit

End Sub



altra cosa se clicchi annulla va in debug

lo dovresti gestire
DRoberto
00mercoledì 6 aprile 2016 18:51
Re:
federico460, 06/04/2016 17.17:

Ciao


Sub CalcoloGiorni2()
Dim Data_di_nascita As Date
Dim Data_di_oggi As Date
Dim Nome As String
Dim Cognome As String
Dim GiorniVissuti As Single
Dim InputUtente As String
Dim InputUtente2 As String
Dim InputUtente3 As Date
Dim InputUtente4 As Date

Riga = 1 'si imposta il numero di una riga iniziale
While Cells(Riga, 1) <> "" 'fino a che la cella, numero Riga, colonna 1 (la A) è diversa da vuota, quindi occupata
Riga = Riga + 1 ' si incrementa di una unità il numero di Riga
Wend


...............

End Sub



altra cosa se clicchi annulla va in debug

lo dovresti gestire




Funziona benissimo [SM=x423028]

Per quanto riguarda la gestione degli errori, la devo studiare.
Non appena completo il tutto posto i risultati.
Saluti e grazie.
DRoberto
00martedì 12 aprile 2016 10:29
Torno di nuovo sull'argomento.

Partendo da questo codice VBA:

Sub CalcoloGiorni()
Dim Data_di_nascita As Date
Dim Data_di_oggi As Date
Dim Giorni_vissuti As Single
Dim InputUtente As String
Dim InputUtente2 As String
Dim InputUtente3 As Date
Dim InputUtente4 As Date
Dim InputUtente5 As Single

Riga = 2 'si imposta il numero di una riga iniziale
While Cells(Riga, 1) <> "" 'fino a che la cella, numero Riga, colonna 1 (la A) è diversa da vuota, quindi occupata
Riga = Riga + 1 ' si incrementa di una unità il numero di Riga
Wend

InputUtente = InputBox("INSERISCI IL COGNOME: ")
Cells(Riga, 1).Value = InputUtente
InputUtente2 = InputBox("INSERISCI IL NOME: ")
Cells(Riga, 2).Value = InputUtente2
InputUtente3 = InputBox("INSERISCI LA DATA DI NASCITA: ")
Cells(Riga, 3).Value = InputUtente3
InputUtente4 = InputBox("INSERISCI LA DATA DI OGGI: ")
Cells(Riga, 4).Value = InputUtente4
GiorniVissuti = InputUtente4 - InputUtente3
Cells(Riga, 5).Value = GiorniVissuti
MsgBox Cells(Riga, 5).Value, , "NUMERO DI GIORNI VISSUTI DALLA NASCITA AD OGGI: "

Columns("A:A").EntireColumn.AutoFit
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit

End Sub
...................
dato che la data di oggi è quella del computer, e si aggiorna di giorno in giorno, è inutile metterla nel codice, per cui se nella colonna D del foglio di lavoro inserisco la formula =OGGI(), poi come posso implementare il codice VBA di sopra con questa formula ?
Cioè, in corrispondenza di:
GiorniVissuti = InputUtente4 - InputUtente3
come si modifica il codice per sottrarre una costante (InputUtente4) da una variabile (InputUtente3) ?
federico460
00martedì 12 aprile 2016 12:55
Ciao


Sub CalcoloGiorni2()
Dim Data_di_nascita As Date
Dim Data_di_oggi As Date
Dim Nome As String
Dim Cognome As String
Dim GiorniVissuti As Single
Dim InputUtente As String
Dim InputUtente2 As String
Dim InputUtente3 As Date
Dim InputUtente4 As Date

Riga = 1 'si imposta il numero di una riga iniziale
While Cells(Riga, 1) <> "" 'fino a che la cella, numero Riga, colonna 1 (la A) è diversa da vuota, quindi occupata
Riga = Riga + 1 ' si incrementa di una unità il numero di Riga
Wend

InputUtente = InputBox("INSERISCI IL COGNOME: ")
Cells(Riga, 1).Value = InputUtente
InputUtente2 = InputBox("INSERISCI IL NOME: ")
Cells(Riga, 2).Value = InputUtente2
InputUtente3 = InputBox("INSERISCI LA DATA DI NASCITA: ")
Cells(Riga, 3).Value = InputUtente3

Cells(Riga, 4).Value = Date
InputUtente4 = Cells(Riga, 4).Value
GiorniVissuti = InputUtente4 - InputUtente3
Cells(Riga, 5).Value = GiorniVissuti
MsgBox Cells(Riga, 5).Value, , "NUMERO DI GIORNI VISSUTI DALLA NASCITA AD OGGI: "



Columns("A:A").EntireColumn.AutoFit
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit

End Sub



e non scrivi la data di oggi
nella cella D2 viene scritta la data di oggi
non formattarla non serve.
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 19:25.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com