Ошибка автоматизации второй раз, когда я открываю форму пользователя и нажимаю кнопку календаря - PullRequest
0 голосов
/ 09 февраля 2019

Я создал код 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...