Почему событие click дает ошибку несоответствия, тогда как без него инициализация формы работает нормально> - PullRequest
0 голосов
/ 27 октября 2019

Я создаю форму календаря и поставил следующий код. Без событий щелчка cmbMonth и cmbYear форма загружается и отображает текущую дату в форме. Но когда я добавляю события щелчка, это дает мне

Ошибка несоответствия типов

на first_date = VBA.CDate("1-" & CInt(Me.cmbMonth.Value) & "-" & Me.cmbYear.Value). Я новичок в Excel VBA и пытаюсь разместить код после видео от PK на его веб-сайте www.PK-AnExcelExpert.com. Вот код:

Private Sub cmbMonth_Change()

      If Me.cmbMonth.Value <> "" & Me.cmbYear.Value <> "" Then

            lblMonthName.Caption = cmbMonth.Value
            Call Show_Date
       End If

End Sub

Private Sub cmbYear_Change()
      If Me.cmbMonth.Value <> "" & Me.cmbYear.Value <> "" Then

            lblMonthName.Caption = cmbMonth.Value

            Call Show_Date

      End If
End Sub

Private Sub UserForm_Initialize()
      Dim i As Integer

      With Me.cmbMonth
            For i = 1 To 12
                  .AddItem VBA.Format(VBA.DateSerial(2019, i, 1), "MMMM")
            Next i

            .Value = VBA.Format(VBA.Date, "MMMM")
      End With

      With Me.cmbYear
            For i = VBA.Year(Date) - 12 To VBA.Year(Date) + 12
                  .AddItem i
            Next i

            .Value = VBA.Format(VBA.Date, "YYYY")

      End With
Call Show_Date

End Sub

Sub Show_Date()

      Dim first_date As Date
      Dim last_date As Date

      first_date = VBA.CDate("1-" & CInt(Me.cmbMonth.Value) & "-" & Me.cmbYear.Value)
      last_date = VBA.DateSerial(Year(first_date), Month(first_date + 1), 1) - 1

MsgBox (first_date)
MsgBox (last_date)

     '===To remove any caption from the date-buttons
      Dim i As Integer
      Dim btn As MSForms.CommandButton

      For i = 1 To 42
            Set btn = Me.Controls("CommandButton" & i)
            btn.Caption = ""
      Next i

      '===first date of the month
      For i = 1 To 7
            Set btn = Me.Controls("CommandButton" & i)
                  If VBA.Weekday(first_date) = i Then
                        btn.Caption = "1"
                  End If
      Next i

End Sub

После ответа мне трудно.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Как насчет использования DateSerial и применения функции Month() на основе региональных настроек, так как понимает комбинированный список, отформатированный с помощью названий локальных месяцев:

      first_date = VBA.DateSerial(Val(Me.cmbYear), Month("1-" & Me.cmbMonth), 1)
0 голосов
/ 27 октября 2019

Попробуйте: используйте все части в аргументе CDate как строковый тип, как показано ниже:

first_date = VBA.CDate("1-" & CStr(Me.cmbMonth.Value) & "-" & CStr(Me.cmbYear.Value))
...