Я нашел этот замечательный сборщик дат из группы людей, сделанных для пользовательского использования в версии excel, которые не поддерживают управление календарем. Я добавил это к другому WB, так что каждый раз, когда пользователь нажимает на столбец, для которого требуется дата, появляется форму пользователя datepicker, а затем введите выбранную дату в ячейке.custom picker popup excel 2010
Теперь я пытаюсь использовать это с пользовательской формой, которую я создал. Я добавил текстовое поле, которое автоматически заполняет сегодняшнюю дату, когда открывается пользовательская форма, но я хочу каким-то образом получить всплывающее окно datepickerform при щелчке по текстовому полю даты. Я добавил private sub textbox_change() datepickerform.show
, но получаю ошибку времени «переменная объекта или с переменной блока не установлена».
Отладчик возвращает меня в эту часть кода DatePickerForm с выделенной первой строкой.
Private Sub UserForm_Activate()
If IsDate(Target.Value) Then
Calendar1.Value = Target.Value
End If
Call MoveToTarget
End Sub
Является ли это помеченным, потому что в моем текстовом поле нет формата даты? Я могу предоставить полный код по запросу, это просто, что это alot, и я не хотел добавлять к моему уже длинному сообщению.
вот код datepickerform:
Option Explicit
Private WithEvents Calendar1 As cCalendar
Public Target As Range
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 = 120
.Width = 180
.GridFont.Size = 7
.DayFont.Size = 7
.Refresh
End With
Me.Height = 153 'Win7 Aero
Me.Width = 197
End If
End Sub
Public Sub MoveToTarget()
Dim dLeft As Double, dTop As Double
dLeft = Target.Left - ActiveWindow.VisibleRange.Left + ActiveWindow.Left
If dLeft > Application.Width - Me.Width Then
dLeft = Application.Width - Me.Width
End If
dLeft = dLeft + Application.Left
dTop = Target.Top - ActiveWindow.VisibleRange.Top + ActiveWindow.Top
If dTop > Application.Height - Me.Height Then
dTop = Application.Height - Me.Height
End If
dTop = dTop + Application.Top
Me.Left = IIf(dLeft > 0, dLeft, 0)
Me.Top = IIf(dTop > 0, dTop, 0)
End Sub
Sub CloseDatePicker(Save As Boolean)
If Save And Not Target Is Nothing And IsDate(Calendar1.Value) Then
Target.Value = Calendar1.Value
End If
Set Target = Nothing
Me.Hide
End Sub
Сборщик календарей - это собственный объект и должен быть создан в вашей пользовательской форме. Код инициализации вашей пользовательской формы может создать этот объект выбора даты и отобразить его, когда в вашей пользовательской форме выбран элемент управления датой. Ошибка времени выполнения жалуется, потому что вы не создали объект выбора даты нигде. Если вы хотите создать объект выбора даты вне вашей пользовательской формы, тогда создайте свойство userform, чтобы «позволить» объекту выбора даты назначить переменной пользовательской формы. – PeterT
По прошествии некоторого времени игры я получил специальную форму выбора даты, когда я выбираю назначенное текстовое поле в моей основной форме пользователя, однако, когда я выбираю дату, она не меняет значение текстового поля , Я действительно покончил с вышеупомянутой пользовательской формой, полностью активированной, и она всплывает и закрывается должным образом, она просто не обновляет значение текстового поля. – Awill
Не видя кода для сборщика дат или не зная об этом, я не могу сказать, как/что обновляет объект выбора даты, т. Е.как связать сборщик дат с текстовым полем (или ячейкой рабочего листа или что-нибудь еще). – PeterT