Excel 2007 VBA可选择单元格范围

时间:2012-12-17 19:49:48

标签: excel-vba excel-2007 vba excel

我试图选择一系列细胞。我以前做过这个,但是语法有问题。

Sub ChgDateX()

Range("A41").Select

Do
    If ActiveCell.Value = "Last Updated" Then
    mydate = ActiveCell.Offset(-40, 0).Value

    'Cells(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 9)).Select
    ActiveCell.Offset(0, 1).Value = mydate
    ActiveCell.Offset(0, 2).Value = mydate
    ActiveCell.Offset(0, 3).Value = mydate
    ActiveCell.Offset(0, 4).Value = mydate
    ActiveCell.Offset(0, 5).Value = mydate
    ActiveCell.Offset(0, 6).Value = mydate
    ActiveCell.Offset(0, 7).Value = mydate
    ActiveCell.Offset(0, 8).Value = mydate
    ActiveCell.Offset(0, 9).Value = mydate

    ActiveCell.EntireRow.Select
    Selection.NumberFormat = "m/d/yyyy"
    ActiveCell.Offset(1, 0).Select
        Else: ActiveCell.Offset(1, 0).Select
    End If
Loop Until ActiveCell.Value = "" & ActiveCell.Offset(-3, 0).Value = ""

End Sub

我试图摆脱个别offset = mydate类型编码。

3 个答案:

答案 0 :(得分:4)

一些事情:

此代码:

Loop Until ActiveCell.Value = "" & ActiveCell.Offset(-3, 0).Value = ""

无法按预期工作,因为您正在寻找的正确运算符为And而非&

您不必“选择”任何内容。您可以在变量中添加对单元格的引用(请参阅我的代码)。

此外,由于您总是向下移动到循环中的下一个单元格,因此可以将其放在IF语句之外。

根据您的代码,我认为您正在寻找类似的内容:

Option Explicit

Sub test()
    Dim r As Range
    Dim myDate As Date

    Set r = Range("A41")

    Do
        If (r.Value = "Last Updated") Then
            myDate = r.Offset(-40, 0).Value

            With Range(r.Offset(0, 1), r.Offset(0, 9))
                .Value = myDate
                .NumberFormat = "m/d/yyyy"
            End With
        End If

        Set r = r.Offset(1, 0)
    Loop Until r.Value = vbNullString And r.Offset(-3, 0).Value = ""

End Sub

答案 1 :(得分:0)

试试这个:

ActiveCell.Range("B1:J1").Value = MyDate

答案 2 :(得分:0)

这个怎么样......有1个音符。我不会像这样建议循环。也许你可以过滤Column A <> ""或其他东西,然后只是循环通过可见细胞?很难说不知道你在做什么。

Option Explicit

Sub ChgDateX()

Range("A41").Select

Do
    If ActiveCell.Value = "Last Updated" Then

        Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 9)).Value = ActiveCell.Offset(-40, 0).Value

        ActiveCell.EntireRow.NumberFormat = "m/d/yyyy"

    End If

    ActiveCell.Offset(1).Select

Loop Until ActiveCell.Value = "" & ActiveCell.Offset(-3, 0).Value = ""

End Sub