我是这个网站以及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周的所有记录。
对不起,如果这太长了,谢谢你提前获得任何帮助。
答案 0 :(得分:0)
如果您在ActiveWorkbook.Worksheets("Daily DB").Activate
声明之前添加End If
,我相信它可以解决您的问题。我不确定它是最有效的方式。