修复了将空单元格转换为日期的VBA代码

时间:2019-07-08 11:06:22

标签: excel vba

我正在从事一些VB项目,这些项目与生成新的Excel工作表和一些数据分析有关。在生成的最终工作表中,有些列包含excel默认日期(00.01.1900)

我后来发现,有一部分代码将前一张工作表中的空白单元格转换为最后一张工作表中的默认日期。这是我认为是问题的部分代码

Set rng_col = ws.Cells.Find(What:="Total Discrepancies", LookIn:=xlValues, LookAt:=xlHeaderRow, SearchOrder:=xlHeaderRow, SearchFormat:=False) 'Total Discrepancies
    If Not (rng_col Is Nothing) Then
        col_total = rng_col.Column
        len_d = ws.Cells(1, len_col_max).End(xlToLeft).Column
        len_l = ws.Cells(len_lines_max, 1).End(xlUp).Row

        For cpt = 2 To len_l
            For k = col_total + 1 To len_d
                ws.Cells(cpt, col_total).Value = CInt(ws.Cells(cpt, col_total).Value) + CInt(ws.Cells(cpt, k).Value)
            Next k
            If ws.Cells(cpt, col_total).Value = 0 Then
                ws.Cells(cpt, col_total).Value = ""
            End If

            If col_first <> 0 And col_last <> 0 Then
                ws.Cells(cpt, col_first).Value = CDate(ws.Cells(cpt, col_first).Value)
                ws.Cells(cpt, col_last).Value = CDate(ws.Cells(cpt, col_last).Value)
            End If
        Next cpt

那么我可以从此代码中更改什么(我从最后4行中猜测),这将使prvs工作表中的空白单元格在最终工作表中保持不变。

1 个答案:

答案 0 :(得分:0)

是的,您可以添加此IF ...然后在最后两行中添加

if ws.Cells(cpt, col_first).value <> 0 then ws.Cells(cpt, col_first).Value = CDate(ws.Cells(cpt, col_first).Value)
if ws.Cells(cpt, col_last).value <> 0 then ws.Cells(cpt, col_last).Value = CDate(ws.Cells(cpt, col_last).Value)

请记住,VBA不会转换日期,只是00.01.1900等于0(零),所以您的零被格式化为日期。