Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Controllo Calendario in ambiente VBA, come utilizzarlo?

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi Charly_new » 12/02/12 21:06

Ciao a tutti.
Premetto che nella casella degli strumenti del VBA ho aggiunto il "controllo calendario 11.0".
Come posso, da una TextBox, aprirlo per inserire una data?
Grazie.
Avatar utente
Charly_new
Utente Junior
 
Post: 59
Iscritto il: 08/03/10 15:57

Sponsor
 

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi Anthony47 » 13/02/12 02:41

Inserisci accanto al Textbox (supponiamo sia TextBox1) l' oggetto Calendario (supponiamo sia Calendar1); poi inserisci questo codice sul textbox
Codice: Seleziona tutto
Private Sub TextBox1_GotFocus()
Calendar1.Visible = True
End Sub
E quest' altro sul calendar
Codice: Seleziona tutto
Private Sub Calendar1_Click()
TextBox1.Value = Calendar1.Value
Calendar1.Visible = False
End Sub

Prova e fai sapere.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi Charly_new » 13/02/12 22:21

Ciao Anthony.
Provato, funziona; giusto quello che chiedevo... grazie davvero!
Avatar utente
Charly_new
Utente Junior
 
Post: 59
Iscritto il: 08/03/10 15:57

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi raimea » 08/03/13 07:04

ciao

sto provando ad utilizzare oggetto calendario 11.

ho creato un foglio x delle prove,
ho creato una useferm2 con dentro il calendario

riesco a far funzionare come test.
con la macro qui sotto :
Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Me.Range("F18:F50")) Is Nothing Then
Me.Range("F18").Value = ""
   UserForm2.Show
   Cancel = True
End If
End Sub

facendo 2ppio clik da F18:F50 si apre la useform2, e mi scrive la data che scelgo sempre in F18.

io ora vorrei che se :
premo F30 apre il calendario , ma la data me la metta in F30
cioe' mettere la data che seleziono, nella cella dove ho fatto clik , x aprire la useform2.

ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi Anthony47 » 08/03/13 09:34

Veramente in quel modo apri solo la userform, la data non viene messa da nessuna parte.
Per compilare una cella con la data potrai usare una macro di Calendar1_Click, come ho visto sai gia' fare. Eviterei pero' che la stessa macro chiuda la form, perche' cosi' facendo non avresti la possibilita' di capire (dai dati del foglio excel) se quella e' la data giusta; per questo (cioe' per fare Unload UserForm1) userei la macro di un pulsante da aggiungere sulla form, o lo stesso UserForm_Click, o la X sulla form.

L' istruzione Me.Range("F18").Value = "" e' palesemente superflua da replicare sulla ActiveCell in cui inserirai la data: se inserisci la data essa sara' automaticamente sostituita, se invece rinunci allora forse e' meglio che il vecchio valore rimanga al suo posto. E, curiosita', a che serve quel "Me"?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi raimea » 08/03/13 17:43

ciao
si, la useform2 con dentro il calendario e' ok
ho un puls per chiuderla.

L' istruzione Me.Range("F18").Value = "" e' palesemente superflua

non saprei come sostiture, (lo trovata cosi' in rete).
E, curiosita', a che serve quel "Me"?
idem come sopra... :roll:

ora forse ci sono riuscito, ho messo nel cod della usform2 questa:
Codice: Seleziona tutto
Private Sub Calendar1_Click()
ActiveCell.Value = Calendar1.Value
Unload UserForm2
Range("A1").Select
End Sub

Private Sub CommandButton1_Click()
Unload UserForm2
End Sub
Private Sub UserForm_Initialize()
Calendar1.Value = Now
End Sub


mentre nel foglio ho messo questa:
Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Me.Range("F18:F50")) Is Nothing Then
Me.Range("F18").Value = ""
   UserForm2.Show
   Cancel = True
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub


anche se ora sembra tutto ok ,
accetto volentieri
modifiche suggerimenti,
grazie
ciao

qui il file
http://dl.dropbox.com/u/96374724/calendario.rar
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi Anthony47 » 09/03/13 00:11

L' istruzione superflua la puoi sostituire con una riga vuota (a meno che F28 non sia una cella che tu volutamente devi azzerare quando attivi il calendario).

In quanto al Me secondo "me" tu frequenti gente che gli piace scrivere, ad esempio
Codice: Seleziona tutto
Dim Wb as Workbook
Dim Ws as Worksheet
Set Wb=ThisWorkbook
Set Ws=Wb.ActiveSheet
With Ws
   .Cells.Clear
End With
invece di scrivere semplicemente
Codice: Seleziona tutto
ThisWorkbook.ActiveSheet.Cells.Clear
.

Come miglioria suggerirei una UserForm_Initialize piu' articolata, del tipo
Codice: Seleziona tutto
Private Sub UserForm_Initialize()
If IsDate(Selection.Value) Then
    Calendario.Value = DateValue(Selection.Value)
    Else
    Calendario.Value = Date
End If
End Sub
Cosi' se apri il calendario su una cella che contiene gia' una data il calendario parte con quella data.

Io eliminerei anche il Range("A1").Select che segue Unload UserForm2

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi raimea » 09/03/13 13:33

ciao
vorrei applicare tutti i tuoi preziosi consigli eanthony47,
ma sto trovando difficolta'... :roll:

nel fgl ho bloccato questa -->
Codice: Seleziona tutto
'Me.Range("F18").Value = ""


non ho capito dove mettere questa:-->
Codice: Seleziona tutto
ThisWorkbook.ActiveSheet.Cells.Clear

a sostituzione di ?

ho sostit il cod nella useform2 con questa:
Codice: Seleziona tutto
Private Sub UserForm_Initialize()
If IsDate(Selection.Value) Then
    Calendario.Value = DateValue(Selection.Value)
    Else
    Calendario.Value = Date
End If
End Sub

poi ho bloccato A1 sempre nel cod della user -->
Codice: Seleziona tutto
'Range("A1").Select


ma quando faccio 2clik
mi da errore run-time 424,
nessun oggetto...

riferendosi a questa istruzione -->
Codice: Seleziona tutto
UserForm2.Show

nel fgl ..... :cry:

mi aiuti a sistemare correttamente le tue indicazioni ?

grazie
ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi Anthony47 » 09/03/13 16:58

Azz, che confusione ho creato....
Anthony ha scritto:In quanto al Me secondo "me" tu frequenti gente che gli piace scrivere, ad esempio

Codice: Seleziona tutto
    Dim Wb as Workbook
    Dim Ws as Worksheet
    Set Wb=ThisWorkbook
    Set Ws=Wb.ActiveSheet
    With Ws
       .Cells.Clear
    End With

invece di scrivere semplicemente
Codice: Seleziona tutto
ThisWorkbook.ActiveSheet.Cells.Clear

Questa parte voleva essere solo un un esempio di inutile complicazione e disottimizzazione del codice che vedo suggerire in giro da sacerdoti del vba che hanno l' interesse a mantenere un' aurea di inaccessibilita' al loro sapere; come e' in piccolo l' uso di "Me" in posizioni in cui complica la comprensione del codice senza fortunatamente creare intralcio.
Quindi leggi quel che penso ma dimentica di applicarlo al caso in discussione; e scusa la confusione che ho alimentato.

Per il resto, non ho capito quale e' il codice residuo, ma ho invece notato che nel mio "miglioramento" della Sub UserForm_Initialize il "controllo calendario" l' ho chiamato "Calendario" mentre tu lo chiamavi Calendar1; usa la denominazione giusta (quella che il calndario ha nella tua userform, quindi immagin Calendar1).
Non so se la confusione ha incasinato il codice, riparti dal tuo iniziale e prova prima a modificae la Sub UserForm_Initialize (come da mio "miglioramento") e poi eliminare il clear di F18.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi raimea » 09/03/13 17:11

ciao :D
ok , ripartiamo...

questo e' il mio attuale cod della useform2:
Codice: Seleziona tutto
Private Sub Calendar1_Click()
ActiveCell.Value = Calendar1.Value
Unload UserForm2
Range("A1").Select
End Sub

Private Sub CommandButton1_Click()
Unload UserForm2
End Sub
Private Sub UserForm2_Initialize()
If IsDate(Selection.Value) Then
    Calendar1.Value = DateValue(Selection.Value)
    Else
    Calendar1.Value = Date
End If
End Sub

questo quello del foglio:
Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Me.Range("F18:F50")) Is Nothing Then
'Me.Range("F18").Value = ""
   UserForm2.Show
   Cancel = True
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

ho bloccato --> 'Me.Range("F18").Value = ""
e la macro non mi da piu' errori.

solo che non apre piu' al gg corrente
oppure come indicato, alla data scritta precedentemente nella cella.

Cosi' se apri il calendario su una cella che contiene gia' una data il calendario parte con quella data.


questo il file
nel caso serva..
http://dl.dropbox.com/u/96374724/calendario.xls

ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi Anthony47 » 10/03/13 00:09

Hai inserito una Private Sub UserForm2_Initialize(), ma il nome corretto dell' evento e' UserForm_Initialize().
Basta cancellare quel "2", quindi lasciando Private Sub UserForm_Initialize()

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Controllo Calendario in ambiente VBA, come utilizzarlo?

Postdi raimea » 10/03/13 07:56

ciao
hooo finalmente....
ci era andato vicino alla soluzione ... :)

ora tutto ok
si apre sul gg corrente se faccio 2pio clik su cella vuota
si apre sulla data della cella se precedentemente scritta.

grazie
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago


Torna a Applicazioni Office Windows


Topic correlati a "Controllo Calendario in ambiente VBA, come utilizzarlo?":


Chi c’è in linea

Visitano il forum: Marius44, raimea e 17 ospiti