我将数据从一个工作簿发送到另一个工作簿。我的宏将数据复制并粘贴到存储我所有数据的masterdata文档中。粘贴后,宏返回并将所有值设置为0,然后保存然后关闭。
sub send()
Workbooks.Open "C:\Users\BB"
Worksheets("CC").Activate
Workbooks("AA").Activate
Worksheets("AA").Range("A3:F19").Copy
Workbooks("BB").Activate
ActiveSheet.Paste Destination:=Worksheets("CC").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
ActiveWorkbook.Save
ActiveWorkbook.Close
Workbooks("AA").Activate
Range("C3:E19").Value = 0
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
我需要代码来检查masterdata工作簿中F列的最后一行中的日期是否等于当月的日期和年份。
如果相等,请删除具有此日期的所有内容并替换为新数据。
答案 0 :(得分:0)
您可以尝试使用datediff函数,如:
' Index run through a column
For Index = 3 To 19
If DateDiff(Now, ActiveSheet.Cells(Index, 5)) = 0 Then
' Replace here your new data
End If
Next
答案 1 :(得分:0)
我会删除我的“第一个答案”,但这是我真正的测试答案:
Sub Send() 'asuming that this Sub is located in the "OriData"-Workbook
Dim OriData As Workbook
Set OriData = ThisWorkbook
Dim MasterData As Workbook
Set MasterData = Workbooks.Open("C:\Users\BB")
Dim ODSht As Worksheet
ODSht = OriData.Sheets("AA")
Dim MDSht As Worksheet
MDSht = MasterData.Sheets("CC")
Dim LastRow As Long
LastRow = MDSht.Cells(MDSht.Rows.Count, "a").End(xlUp).Row 'Last Row in Masterdata which contains data in Column a
Dim NewDate As Date
NewDate = MDSht.Cells(LastRow, 6) 'Last row, column F
If month(Date) = month(NewDate.Value) And Year(Date) = Year(NewDate.Value) Then
也许你必须在NewDate之后删除.Value(你必须尝试)。
由于我不确定你想要删除的是什么,我会编写代码,将masterdata中的整行删除,而在F栏中,日期(月份和年份)对应于“今天”的日期:
MDSht.Row(LastRow).Delete
如果您想要删除的不仅仅是一行,您必须相应地更改代码,但这可能对您有所帮助。
End If
MasterData.Save
MasterData.Close
为什么在你的代码中你正在复制的范围(A3:F19)和你设置为0的范围(C3:E19)不一样?
OriData.Activate
ODSht.Range("A3:F19").Value = 0
OriData.Save
OriData.Close
End Sub
如果您使用LastRow和NewDate创建一个函数,您可以使用新数据循环它,以便每次都能控制而不会出现进一步的复杂情况:
Function LastRow(WS As Worksheet)
LastRow = WS.Cells(WS.Rows.Count, "A").End(xlUp).Row
End Function
Function NewDate(Sht As Worksheet, R As Long)
NewDate = Sht.Cells(R, 6).Value
End Function
遵循之前的If-Condition:
For DRow = 1 To LastRow(MDSht)
If (month(Date) = month(NewDate(MDSht, DRow))) And (Year(Date) = Year(NewDate(MDSht, DRow))) Then
MDSht.Row(DRow).Delete
ElseIf DRow = LastRow(MDSht)
MsgBox "Finished", vbokOnly
Exit Sub
End If
Next DRow
告诉我,如果它有用,什么没有(我很有兴趣知道,我可以从中学到更多),谢谢:)