Я создал код vba, который при нажатии кнопки листа открывает форму пользователя и добавляет в нее некоторые элементы управления во время выполнения.Эти элементы управления представляют собой набор меток, текстовых полей и кнопок.Для этого текстового поля, в котором ожидается значение даты, рядом с ним также создается кнопка календаря во время выполнения.
При первом открытии пользовательской формы пользователь может нажать кнопку календаря без ошибок, итекстовое поле продолжает заполняться с выбранной датой.Однако если пользователь выходит из пользовательской формы с помощью кнопки «X» (закрыть), снова открывает пользовательскую форму, нажимает кнопку календаря и нажимает на метку дня, возникает ошибка со следующей формулировкой:
Ошибка времени выполнения '-2147418113 (8000ffff)': ошибка автоматизации
Найдите ниже упрощенный код, который я использую для класса, который обрабатывает событие щелчка метки дня.
У меня естьискал решение в сети безуспешно.Я также очистил весь код, скомпилировал и поместил код обратно, но ничего не изменилось.
Option Explicit
Public WithEvents InputLabel As MSForms.Label
Public originTB As Controls
Private Sub InputLabel_click()
Dim cal_ParentForm_text As String
Dim cal_ParentCtrl_text As String
Dim cal_ParentTB As String
Dim ctl As Control
Dim count As Integer
Dim myWords As String
Dim word As String
Dim i As Long
Dim tag_len As Integer
lFirstDay = Val(InputLabel.Caption)
'Form_calendar.tag STRUCTURE: FORM,FRAME,TEXTBOXNAME
count = 0
word = ""
myWords = Form_calendar.Tag
tag_len = Len(myWords)
For i = 1 To tag_len
If Mid(myWords, i, 1) = "," Or i = tag_len Then 'End of word
count = count + 1
Select Case count
Case 1 'Form
cal_ParentForm_text = word
word = ""
Case 2 'Frame
cal_ParentCtrl_text = word
word = ""
Case 3 'TextBoxName
cal_ParentTB = word & Mid(myWords, i, 1)
End Select
Else
word = word & Mid(myWords, i, 1)
End If
Next i
'Look for the origin textbox within calendar textbox collection (coll_CalTextBox)
For Each ctl In coll_CalTextBox
If ctl.Name = cal_ParentTB Then
'FOLLOWING LINE TRIGGERS THE ERROR
ctl.Text = Format(ReturnDate(lFirstDay, lSelMonth, lSelYear), "Short Date")
End If
Next ctl
Unload Form_calendar
End Sub
Function ReturnDate(ByVal lDay As Long, ByVal lMonth As Long, ByVal lYear As Long) As Date
'Returns the date with day, month and year in
'the sequence defined by the system's settings.
Dim lDayPos As Long 'Day position in date
Dim lMonthPos As Long 'Month position in date
lDayPos = Day("01-02-03")
lMonthPos = Month("01-02-03")
If lDayPos = 1 And lMonthPos = 2 Then
ReturnDate = lDay & "/" & lMonth & "/" & lYear
'AFTER THIS STATEMENT THE ERROR IS TRIGGERED
Exit Function
ElseIf lDayPos = 2 And lMonthPos = 1 Then
ReturnDate = lMonth & "/" & lDay & "/" & lYear
Exit Function
ElseIf lDayPos = 3 And lMonthPos = 2 Then
ReturnDate = lYear & "/" & lMonth & "/" & lDay
Exit Function
ElseIf lDayPos = 2 And lMonthPos = 3 Then
ReturnDate = lYear & "/" & lDay & "/" & lMonth
Exit Function
ElseIf lDayPos = 1 And lMonthPos = 3 Then
ReturnDate = lDay & "/" & lYear & "/" & lMonth
Exit Function
ElseIf lMonthPos = 1 And lDayPos = 3 Then
ReturnDate = lMonth & "/" & lYear & "/" & lDay
End If
End Function