Excel VBA单元格值显示为整数

时间:2015-04-30 14:02:57

标签: excel vba for-loop logic

我正在使用Excel的VBA功能编写程序,但遇到了一个非常奇怪的逻辑错误。

For SheetIndex = 1 To 6
    With ActiveSheet
    For ColIndex = 2 To 6
        For DateIndex = 0 To MinLimit

        datethingy = .Cells(1, ColIndex).Value

        If (.Cells(1, ColIndex).Value = Date_Array(DateIndex, 1)) Then

            For RowIndex = 2 To 11

'           Compare every time slot value here to every time slot value in the array
            datethingy = Trim(CStr(.Cells(RowIndex, 1).Value)) 'ERROR OCCURS HERE

            If (Trim(CStr(.Cells(RowIndex, 1).Value)) = Date_Array(DateIndex, 2)) Then
                .Cells(RowIndex, ColIndex).Value = "Checked"
            End If

            Next
        End If
        Next
    Next
    End With

    SheetIndex = SheetIndex + 1
    Application.Worksheets(SheetIndex).Activate
Next

所以在上面的代码中,我会查看一系列单元格值,并对我在数组中已有的值进行比较。但是,当我从单元格中绘制值而不是“8:30”时,它会显示为“0.354166666 ... 7”。我不知道为什么它会像这样出现,我甚至确保将它作为字符串进行比较,而不是作为int或其他任何东西进行比较。

这是我为工作表单元格设置值的位置。

.Cells(2, 1).Value = "8:30"
.Cells(3, 1).Value = "9:00"
.Cells(4, 1).Value = "10:15"
.Cells(5, 1).Value = "11:30"
.Cells(6, 1).Value = "12:30"
.Cells(7, 1).Value = "13:30"
.Cells(8, 1).Value = "14:45"
.Cells(9, 1).Value = "16:00"
.Cells(10, 1).Value = "17:15"
.Cells(11, 1).Value = "18:15"

With Range("A2", "A11")
    .HorizontalAlignment = xlCenter
    .Font.Bold = True
    .ColumnWidth = 15
End With

ActiveSheet.Cells.Rows.AutoFit

有谁知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

Excel将时间和日期存储为数字。每个整数是一天,小时,分钟和秒被分解为当天的分数。 8:30只是一个时间,所以没有整数,8.5 / 24 = 0.3541667。

您可以使用此代码对此进行测试,这可能为您提供格式化输入的方法。在8号单元格中输入8:30

Int32