【发布时间】:2018-05-14 16:09:32
【问题描述】:
对 VBA 非常陌生(和一般的编码),试图用我可以在网上找到的信息自学。
编写一个宏,将在 MAIN 表中输入的员工绩效数据逐行复制到工作簿的 LOG 表中。
到目前为止,我已经设法让它正常工作。但是现在我想添加一个FIND函数来判断LOG表上是否已经存在一行数据,这样我就可以使用IF... THEN语句:
- 如果特定员工和日期的数据不不存在,则该行将复制到日志表的第一个空行。
- 如果它确实已经存在,则日志表上的现有数据行将被覆盖。
这就是我所拥有的:
Sub CopyToLog()
Dim RowCount As Integer
Sheets("MAIN").Select
For RowCount = 1 To Range("WeeklyData").Rows.Count
With Sheets("LOG").Range("A:B")
Set Dupe = .Find(Sheets("MAIN").Range("B5:C5").Offset(RowCount - 1, 0), LookIn:=xlValues)
Range("B5:F5").Offset(RowCount - 1, 0).Select
Selection.Copy
Sheets("LOG").Select
If Dupe Is Nothing Then
Range("A" & Rows.Count).End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Else
Dupe.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
End With
Sheets("MAIN").Select
Next RowCount
End Sub
但这不起作用。看起来问题出在 Find 函数中:
With Sheets("LOG").Range("A:B")
Set Dupe = .Find(Sheets("MAIN").Range("B5:C5").Offset(RowCount - 1, 0), LookIn:=xlValues)
我需要检查 both 日期 和 员工(主工作表上的 B 和 C 列与 LOG 上的 A 和 B 列表),但是这里的公式似乎只是比较第一列(日期)。因此,如果下一位员工的数据为同一日期,则该员工的数据现在会被下一位员工覆盖。
您是否只能使用 Find 来查找单个单元格的值,而不是两个相邻单元格的范围?如果是这样,有关如何解决此问题的任何提示?
【问题讨论】: