Calendario month view para formulario con muchas fechas

Tengo un formulario con muchísimas fechas. Le he integrado el calendario. No sé cómo hacer para que todos los textbox que son muchos tengan cada uno su fecha al desplegar el calendario. Hasta ahora solo consigo que ponga fecha en un textbox. ¿Cómo puedo hacer que el calendario se despliegue y ponga la fecha en el textbox que corresponda?

2 Respuestas

Respuesta
1

María, primero, bienvenida a este foro. En segundo lugar serñia más conveniente que pusieras una imagen del formulario, para que nos ciñamos a tu pregunta y no que tengas que ceñirte a nuestra respuesta. Por ejemplo, si tenglo un formulario, donde le pongo un cuadro de texto Fecha, en el que voy a escribir una(tu tendrías que ponerlo en el evento Después de actualizar de tu control Calendar), y 6 cuadros de texto A1, A2, etc. Me considero muy vago para poner los 31.

Escribo una( tu la elegirías)

Cuando pulso Enter

Si cambio la fecha y pulso Enter

El código del evento Después de Actualizar del cuadro de texto Fecha es

Private Sub Fecha_AfterUpdate()
Dim i As Integer
Dim lbl As Control
For i = 1 To 6
Set lbl = Controls("A" & i)
lbl.Value = Fecha - 1 + i
Next i
End Sub

Lo siento, creí que era en Access. Quien mejor te lo puede explicar es Dante.

Respuesta
1

H o l a Maria Bernal gonzalez y bienvenida a TodoExpertos!

En lugar de textbox puedes poner controles MonthView o DTPicker

Trabajo con Windows 2010 y ya he probado con datapicker pero incluso siguiendo las instrucciones paso a paso en la instalacion no me lo ha reconocido. Al intentar crear con herramienta en vba pulso con el botón derecho para más botones adicionales pero no se encuentra el datapicker, por este motivo pensé usar otro calendario como complemento. Muchas gracias por responder. 

Puedes subir a google drive tu archivo, con tu userform, no es necesaria la información o reemplaza la información con datos genéricos.

Necesito ver tu calendario y cómo adaptarlo a todos los texbox de fecha.

Después de que subas el archivo a google drive, lo compartes para que cualquiera que tenga el vínculo. Copias el vínculo y lo pegas aquí.

Te anexo un control de calendario. En el archivo está la clase cCalendar, simplemente copia el módulo de clase a tu archivo.


Antes de que intentes adaptar todos los códigos a tu UserForm, realiza pruebas en el archivo que estoy compartiendo.


Funciona de la siguiente manera:

1. Debes crear un módulo de clase llamado: "Class1"

2. Pon el siguiente código en el módulo de clase "Class1":

Public WithEvents MultTextbox As MSForms.TextBox
Private Sub MultTextbox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  With DatePickerForm
    Set .TxtBx = MultTextbox
    .Show
  End With
End Sub

3. Crea un userform con el nombre: "DatePickerForm" (simplemente copia o arrastra el userform a tu  archivo).

4. El código en el form "DatePickerForm":

Option Explicit
Private WithEvents Calendar1 As cCalendar
Public TxtBx As Object 'MSForms.TextBox
Private Sub Calendar1_Click()
    Call CloseDatePicker(True)
End Sub
Private Sub Calendar1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = vbKeyEscape Then
    Call CloseDatePicker(False)
  End If
End Sub
Private Sub UserForm_Initialize()
  If Calendar1 Is Nothing Then
    Set Calendar1 = New cCalendar
    With Calendar1
        .Add_Calendar_into_Frame Me.Frame1
        .UseDefaultBackColors = False
        .DayLength = 3
        .MonthLength = mlENShort
        .Height = 140
        .Width = 180
        .GridFont.Size = 7
        .DayFont.Size = 7
        .Refresh
    End With
    Me.Height = 173 'Win7 Aero
    Me.Width = 197
  End If
End Sub
Private Sub UserForm_Activate()
  Calendar1.Value = Date   'Target.Value
  Me.Top = UserForm1.Top + TxtBx.Top + TxtBx.Height
  Me.Left = UserForm1.Left + TxtBx.Left + TxtBx.Width
End Sub
Sub CloseDatePicker(Save As Boolean)
  UserForm1.Controls(TxtBx.Name) = Calendar1.Value
  UserForm1.Controls(TxtBx.Name).SetFocus
End Sub

5. En tu userform, en mi ejemplo es el UserForm1 pon el siguiente código:

Dim TxtBx() As New Class1
Private Sub UserForm_Initialize()
  Dim i As Long, n As Long
  Dim ctrl As MSForms.Control
  i = 1
  For Each ctrl In Me.Controls
    If TypeName(ctrl) = "TextBox" Then
      Select Case ctrl.Name
        Case "TextBox2", "TextBox7", "TextFecha4", "TextFecha5"
          ReDim Preserve TxtBx(i)
          Set TxtBx(i).MultTextbox = ctrl
          i = i + 1
      End Select
    End If
  Next
End Sub

6. En esta línea debes poner los nombres de los textbox que son para capturar fecha:

Case "TextBox2", "TextBox7", "TextFecha4", "TextFecha5"

Lo que hace el código en el userform1 es hacer una colección de todos los textbox en los cuales vas a capturar una fecha y asociarlos a una clase.

Entonces los eventos que ocurran en esos textbox, podrán ser controlados desde la clase "Class1".

Para este caso, cuando des clic en los textbox de fecha se abrirá el calendario, al seleccionar la fecha en el calendario, automáticamente se llenará el textbox seleccionado.


Mi archivo de pruebas:

https://drive.google.com/file/d/106jNb43igqH-wEsKBBvqfa2N6wF6mVig/view?usp=sharing 

Es justo lo que necesito. De verdad que vuestra ayuda es importantísima. No habría llegado ni a la mitad de lo poco que conozco de Excel sin personas tan desinteresadas y profesionales como vosotros. Muchas gracias, por sacarme una vez más del atolladero. Un saludo. Dante eres un genio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas