在Excel中选择Range并替换Nulls

时间:2018-09-06 18:59:36

标签: sql excel vba ms-access

我正在研究一个工作簿,该工作簿从Access到Excel导入数据,并且需要弄清楚当单元格为空时如何用默认日期值替换某些列中的值。我有24列,彼此之间没有顺序排列,但其中包含日期值,但是有空白。我试图使用select范围代码来选择范围并替换值,但是遇到范围不连续的问题。我当时想我可以使用几乎总是填写的另一列来标识范围计数的末尾,并继续执行我开始时使用的空替换,但我不知道该怎么做。有没有办法轻松地做到这一点?这是我现在正在使用的代码:

Sub replace_blanks()
    Dim cellvar As Range
    For Each cellvar In Selection.Cells
        If cellvar.Value = vbNullString Then
            cellvar.Value = "1/1/1900"
        End If
    Next cellvar
End Sub

Sub AfterImport()

    Range("B1", Range("B1").End(xlDown)).Select

End Sub

更新:

Sub AfterImport()
Dim cellvar As Range
Dim AccessData As Worksheet
Dim lngLastRow As Long

Set AccessData = Worksheets("AccessData")
With AccessData

    lngLastRow = .Cells(.Rows.Count, "D").End(xlUp).Row
    Range("B1", "B" & lngLastRow).Select
        For Each cellvar In Selection.Cells
            If cellvar.Value = vbNullString Then
             cellvar.Value = "1/1/1900"
            End If
        Next cellvar
End With

注意:当活动工作表是AccessData工作表时,代码的最后一部分有效。但是,当我在另一张纸上运行它时,出现错误,宏退出。

谢谢。

1 个答案:

答案 0 :(得分:0)

这是完整的代码:

Sub AfterImport()
Dim cellvar As Range
Dim AccessData As Worksheet
Dim lngLastRow As Long

Set AccessData = Worksheets("AccessData")
With AccessData

    lngLastRow = .Cells(.Rows.Count, "D").End(xlUp).Row

End With
worksheets("AccessData").Activate
Range("B1", "B" & lngLastRow).Select
        For Each cellvar In Selection.Cells
            If cellvar.Value = vbNullString Then
             cellvar.Value = "1/1/1900"
            End If
        Next cellvar
End Sub