Private Sub cboMonth1_Change()
Dim rng As Range
Dim rngStart As Range
Dim rngEnd As Range
Dim dt As Worksheet
Dim strStart As String
Dim strEnd As String
Dim ICell As Range
Set dt = Worksheets("Sheet1")
If Me.cboMonth1.Value = "January" Then
Set rng = Range("J2")
ElseIf Me.cboMonth1.Value = "February" Then
Set rng = Range("AO2")
End If
If rng.MergeCells Then
Set rng = rng.MergeArea
Set rngStart = rng.Cells(1, 1)
Set rngEnd = rng.Cells(rng.Rows.Count, rng.Columns.Count)
strStart = Mid(rngStart.Address, 1, Len(rngStart.Address) - 1)
strEnd = Mid(rngEnd.Address, 1, Len(rngEnd.Address) - 1)
Me.cboStartDate.Clear
For Each ICell In dt.Range(strStart & "3 : " & strEnd & "3")
Me.cboStartDate.AddItem (ICell.Value)
Next ICell
Else
MsgBox ("Not merge cells")
End If
End Sub
Cell Format: Custom dd/mm
дата Excel VBA в настоящее время вычитается один день
Пример: В ячейку J3 содержит 1/1/1900, но J3 значение отображается 12/31/1899 в выпадающем списке последний пункт будет дисплей 30/1/1900. Я ожидаю, что combobox будет содержать даты с 1/1/1900 - 31/1/1900, если выбран январь и так далее.
Я пробовал распечатать отдельные значения MsgBox (dt.Range("J3").Value)
, но он дает мне 12/31/1899, но содержимое этой ячейки равно 1/1/1900.
* Примечание. У меня нет кода, который изменяет содержимое ячеек.
У меня была аналогичная проблема с датами в приложении базы данных Access. Округление значения с плавающей запятой (double) вызывало две даты с той же «датой», которые оценивались как не равные. Моим единственным решением было преобразовать исходное поле 'Date' во внутреннюю' String', а затем обратно в 'Date' для принудительной эквивалентности. Иногда я просто сравнивал даты как строки. – PeterT