calendario in cella excel

Anonimo
2016-07-09T09:08:59+00:00

ciao a tutti

vorrei velocizzare l'immissione di date in un foglio di excel e ho pensato a 2 soluzioni:

  • al posto di scrivere 09/07/2016 vorrei scrivere 09072016 e il programma dovrebbe in automatico riconoscere la data.
  • quando una cella è selezionata, combinazione di tasti e che compaia un calendario da cui scegliere una data.

cosa mi suggerite?

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2016-07-17T06:52:18+00:00

Ma stai seguendo la procedura qui sotto(in inglese)?

E, come ti è già stato consigliato, c'è anche questo:

o la semplice, banale UserForm proposta nel mio (lontano....) primo post:

La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2016-07-09T14:07:29+00:00

Ciao gtsolid,

vorrei velocizzare l'immissione di date in un foglio di excel e ho pensato a 2 soluzioni:

  • al posto di scrivere 09/07/2016 vorrei scrivere 09072016 e il programma dovrebbe in automatico riconoscere la data.
  • quando una cella è selezionata, combinazione di tasti e che compaia un calendario da cui scegliere una data.

cosa mi suggerite? 

Ti sconsiglio il primo approccio.

Prova ad inserire un controllo calendario, dai controlli ActiveX, sul foglio e nel modulo di codice del foglio. incolla il segente codice:

'=========>>

Option Explicit

'--------->>

Private Sub Calendar1_Click()

    With ActiveCell

        .Value = CDbl(Calendar1.Value)

        .NumberFormat = "mm/dd/yyyy"

        .Select

    End With

End Sub

'--------->>

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Rng As Range

    Const mioIntervallo As String = "A1:A30"                 '<<=== Modifica

    If Target.Cells.Count > 1 Then

        Exit Sub

    End If

    Set Rng = Me.Range(mioIntervallo)

    With Calendar1

        If Not Application.Intersect(Rng, Target) Is Nothing Then

            .Left = Target.Left + Target.Width - Calendar1.Width

            .Top = Target.Top + Target.Height

            .Visible = True

            .Value = Date

        ElseIf .Visible Then

            .Visible = False

        End If

    End With

End Sub

'<<=========

Cliccando sulla cella (diciamo) A10, se vedrebbe qualcosa del genere:

![](http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=c2e409c7-200a-41c8-8d08-98857732e1d2)

Potresti scaricare il mio file di esempio Gtsolid20160709.xlsm a:

https://www.dropbox.com/s/69cio917kh4twrm/Gtsolid20160709.xlsm?dl=0

===

Regards,

Norman

![](http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=080b1f2a-fb91-4e40-90d5-86aa09f2e296)

La risposta è stata utile?

0 commenti Nessun commento

52 risposte aggiuntive

Ordina per: Più recente
  1. Anonimo
    2016-07-15T08:35:37+00:00

    Ciao Casanmaner,

    Credevo che tu volessi una routine generica, indipendente dalla versione di Windows, in grado di gestire sia Excel 32bit  che 64bit. Se tu volessi perseverare così, forse potresti considerare sfruttando la funzione GetSystemWow64Directory:

    https://msdn.microsoft.com/en-us/library/ms724405%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

    e

    **http://www.pinvoke.net/default.aspx/kernel32.getsystemwow64directory**

    ===

    Regards,

    Norman

    ![](http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=86a4c0e5-852b-46f6-897b-6b7b132c597b)

    Ciao Norman, in effetti quello che chiedevo era proprio se esistesse qualcosa che, in base al sistema operativo, decidesse cosa fare.

    Provo a leggere i link :-)

    Però mi pare di capire che alla fine, a meno di creare un vero "installatore" con tanto di "cab"  che contenga di due file da "installare" (cosa non da me ovviamente), alla fine non resta che una soluzione "barbara" come quella che ho ipotizzato (nel mio caso utilizzando un file excel perché in realtà non conosco il vbscript per quanto riguarda il lancio di programmi tipo shell e non mi ci addentro).

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-07-15T07:28:20+00:00

    Ciao Casanmaner,

    Credevo che tu volessi una routine generica, indipendente dalla versione di Windows, in grado di gestire sia Excel 32bit  che 64bit. Se tu volessi perseverare così, forse potresti considerare sfruttando la funzione GetSystemWow64Directory:

    https://msdn.microsoft.com/en-us/library/ms724405%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

    e

    **http://www.pinvoke.net/default.aspx/kernel32.getsystemwow64directory**

    ===

    Regards,

    Norman

    ![](http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=86a4c0e5-852b-46f6-897b-6b7b132c597b)

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-07-14T22:19:31+00:00

    Per quanto ne so io, credo di no.

    Tuttavia, forse il seguente link potrebbe essere di interesse:

    https://msdn.microsoft.com/en-us/library/aa262321(v=vs.60).aspx

    Interessante ma un po' troppo tanto oltre per me :-)

    Io al massimo posso arrivare, nel caso mi servisse, a qualcosa del genere da lanciare da un file excel dopo aver salvato tutti i file nella medesima directory.

    Ma anche così  ..... mmmmmhhhhhhhh ... non so!!!! ... non mi fiderei tanto.

    Sub Fix_MSCAL_OCX_Win64bit()

    Dim Risp As Integer

    Risp = MsgBox("Verrà lanciata la procedura per il Fix della mancata presenza del componente aggiuntivo MSCAL.OCX." & vbCrLf & _

                  "Assicurarsi che i file MSCAL.OCX e MSCAL.HLP, forniti assieme a questo file, siano salvati nella stessa directory" & _

                  "in cui è salvato questo file." & vbCrLf & "Continuare?", vbQuestion + vbOKCancel + vbDefaultButton1, "Fix MSCAL.OCX per Windows 64-bit")

    If Risp = vbCancel Then Exit Sub

      Const sMsCalOcxName = "MSCAL.OCX"

      Const sMsCalHelpName = "MSCAL.HLP"

      Const sDestinationPath = "C:\Windows\SysWOW64"

      Const sExeName = "regsvr32.exe"

      Dim FSO As Object

      Dim sPathFile As String

      Set FSO = CreateObject("Scripting.FileSystemObject")

      sPathFile = ThisWorkbook.Path & Application.PathSeparator

      With FSO

        If .FolderExists(sDestinationPath) Then

          If .FileExists(sPathFile & sMsCalOcxName) And .FileExists(sPathFile & sMsCalHelpName) Then

            .CopyFile sPathFile & sMsCalOcxName, sDestinationPath, True

            .CopyFile sPathFile & sMsCalHelpName, sDestinationPath, True

            .DeleteFile sPathFile & sMsCalOcxName

            .DeleteFile sPathFile & sMsCalHelpName

            MsgBox "I files " & sMsCalOcxName & " e " & sMsCalHelpName & " sono stati copiati in " & sDestinationPath, vbInformation, "Fix MSCAL.OCX"

            Call Shell("cmd.exe /C" & sDestinationPath & sExeName & " " & sMsCalOcxName, vbHide)

          Else

            MsgBox "I files " & sMsCalOcxName & " e " & sMsCalHelpName & " non sono presenti in  " & sPathFile & vbCrLf & _

                   "Copiare il file in " & sPathFile & " e lanciare nuovamente il Fix!", vbCritical, "Fix MSCAL.OCX"

            Exit Sub

          End If

        Else

          MsgBox "La directory " & sDestinationPath & " non esiste!" & vbCrLf & _

                 "La procedura verrà interrotta.", vbCritical, "Fix MSCAL.OCX"

            Exit Sub

        End If

      End With

      Set FSO = Nothing

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento