为什么我的下一个循环不能正常工作?

时间:2014-05-17 02:07:33

标签: excel vba excel-vba

我是这个网站以及VBA的新手。我一直在做一个项目,并碰壁了。我希望有人可以帮助我。我要做的是创建一个循环,它将遍历指定的工作表并提取符合我的条件的数据,将其复制并粘贴到另一个工作表,我将在其中计算它,然后在另一个工作表中显示计算结果片。

所以,我有以下代码(excel VBA),假设要通过工作表并提取与当前周相匹配的所有记录(我还试图添加当前年份,到目前为止没有运气)并粘贴所有匹配的记录都名为Archieve:

Sub DataByWeek()

Dim cw As Integer ' current week
Dim cy As Integer ' current year
Dim lr As Long 'last row of data
Dim i As Long ' row counter

'Get week number of today's date
cw = Format(Date, "ww")
cy = Format(Date, "yyyy")

ActiveWorkbook.Worksheets("Daily DB").Activate

' Find last row of data plus one down
lr = Sheet7.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

For i = 2 To lr
    If Cells(i, 6) = cw Then
        Range(Cells(i, 1), Cells(i, 5)).Copy
        ActiveWorkbook.Worksheets("Archieve").Activate
        Range("A2").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
        End If
Next i

End Sub

此代码执行我想要的所有操作,除了返回超出第一个匹配的迭代。代码会检查名为Daily DB的工作表上的所有数据,但只返回第一个匹配的记录。我已经尝试在线查看(很多网站包括这个),看看我是否错过了什么或做错了什么,但我找不到我错的地方。

我还想知道如何在If语句条件中添加第二个条件。我想添加年份,以便条件读取类似

If Cells(i, 6 & 7) = cw & cy Then
...

其中i,6包含周数,i,7包含年份。换句话说,我想'说'找到包含x周x周的所有记录。

对不起,如果这太长了,谢谢你提前获得任何帮助。

1 个答案:

答案 0 :(得分:0)

如果您在ActiveWorkbook.Worksheets("Daily DB").Activate声明之前添加End If,我相信它可以解决您的问题。我不确定它是最有效的方式。