2016-01-07 32 views
0

我将数据从一个工作簿发送到另一个工作簿。我的宏将数据复制并粘贴到存储我所有数据的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

你可以尝试使用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 
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列中的日期(月和年)对应于“today”的日期:

 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-条件:

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 

请告诉我,如果它工作,什么都没有(有趣的是我知道,我可以从中了解更多),谢谢:)

相关问题