Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-复制前检查范围内的数据是否已存在_Vba_Excel - Fatal编程技术网

Excel VBA-复制前检查范围内的数据是否已存在

Excel VBA-复制前检查范围内的数据是否已存在,vba,excel,Vba,Excel,我有一个excel文件和几张表格。在一张“每日跟踪器”的页面上,我有一些数据,在我的代码中,我将这个范围标记为“DailyTable”,其中包含我想要复制的数据 一旦本周的数据全部填写完毕,我希望有几件事情发生 “DailyTable”中的数据复制到最后一行数据下的“Daily Backup”中。[我有这个工作] 在复制“DailyTable”之前,它会检查重复数据[防止多次按下备份宏并产生重复数据。] 如果数据重复,则会发出通知,告知用户他们已经备份了本周的数据 我将使用另一个脚本清除数据,将

我有一个excel文件和几张表格。在一张“每日跟踪器”的页面上,我有一些数据,在我的代码中,我将这个范围标记为“DailyTable”,其中包含我想要复制的数据

一旦本周的数据全部填写完毕,我希望有几件事情发生

  • “DailyTable”中的数据复制到最后一行数据下的“Daily Backup”中。[我有这个工作]
  • 在复制“DailyTable”之前,它会检查重复数据[防止多次按下备份宏并产生重复数据。]
  • 如果数据重复,则会发出通知,告知用户他们已经备份了本周的数据
  • 我将使用另一个脚本清除数据,将本周的时间增加1。在我之前测试这个过程时,您可以看到这里输入的一些变量。如果有更好的方法,我想听听你的想法 我的第一个VBA脚本(请指出任何效率低下或可能更好的方法,我非常愿意学习如何以及为什么工作):

    我相信这看起来很可怕,但任何帮助都将不胜感激。渴望学习

    ============================================================================

    编辑2/15:我将其分为两个子例程,因为我想只备份一系列问题,备份并清除一系列问题

    Sub ClearDailySheet()
        'Declare the variable ranges.
        Dim tB As Workbook
        Dim DailyWS As Worksheet
        Dim DailyTable As Range
        Dim BackupWS As Worksheet
        Dim NewTable As Range
        Dim Oldtable As Range
        Dim Week As Range
        Dim LastWeek As Range
        Dim WeekBackup As Range
        Dim LastRow As Long
        Dim NextRow As Long
    
        Set tB = ThisWorkbook
        With tB
            Set BackupWS = .Sheets("Daily Tracker Backup")
            Set DailyWS = .Sheets("Daily Tracker")
        End With 'tB
        With DailyWS
            Set DailyTable = .Range("C7:Q21")
            Set Week = .Range("F4")
        End With 'DailyWS
        With BackupWS
            NextRow = .Range("C" & .Rows.Count).End(xlUp).Row + 1
            Set WeekBackup = .Range("A1").Offset(NextRow, 0)
            Set NewTable = .Range("C1:Q15").Offset(NextRow, 0)
            LastRow = .Range("A" & .Rows.Count).End(xlUp).Row - 1
            Set LastWeek = .Range("A1").Offset(LastRow, 0)
            Set Oldtable = .Range("C1:Q15").Offset(LastRow, 0)
        End With 'BackupWS
    
        If LastWeek.Value <> Week.Value Then
            '''Normal backup
            If vbYes <> MsgBox("Oops! Your daily tracker data for this week has not yet been backed up," & vbCrLf & _
                                "before resetting this form we recommend backing up your data. Proceed with backup? [RECOMMENDED]", vbYesNo + vbQuestion, _
                                "Missing Backup") Then
                '''Avoid backing up now
                MsgBox "It is NOT recommended to reset the daily sheet without backing up this week's data.", vbExclamation + vbOKOnly
                Exit Sub
            Else
                '''Transfer the data
                    WeekBackup.Value = Week.Value
                    NewTable.Value = DailyTable.Value
    
                    '''Notify User Backup Complete.
                    MsgBox "Backup: COMPLETED [Week #" & Week.Value & "]", vbInformation + vbOKOnly
    
                    '''Confirm Clear Data
                If vbNo <> MsgBox("Reset Daily Tracker [Clear Current Data]" & vbCrLf & _
                             "" & vbCrLf & _
                             "Are you SURE you want to reset the daily tracker?" & vbCrLf & _
                             "This canNOT be undone!", _
                             vbYesNo + vbCritical, "Confirm Daily Data Reset") Then
    
                    '''Clear input form
                    Clear_InputForm DailyWS
    
                    '''Increases Daily Table Week # by 1 after reset.
                    Week.Value = Week.Value + 1
    
                    '''Notify User Backup Complete.
                    MsgBox "Backup & Data Reset: COMPLETED!" & vbCrLf & _
                             "" & vbCrLf & _
                             "[Daily Tracker is ready for the new week!]", vbInformation + vbOKOnly
                Else
                    '''What to do if they don't want to overwrite?
                    MsgBox "Data Reset CANCELLED", vbExclamation + vbOKOnly
                    Exit Sub
                End If
            End If
        Else
            '''Data already present
            If vbYes <> MsgBox("This weeks tracker data (week #" & Week.Value & ") appears to be backed up already," & vbCrLf & _
                        "do you want to overwrite the old backup with the latest data before resetting the tracker? [RECOMENDED]", vbYesNo + vbQuestion, _
                        "Backup Data Exists") Then
                '''What to do if they don't want to overwrite?
                MsgBox "Backup & Data Reset: CANCELLED!", vbExclamation + vbOKOnly
            Else
                '''Overwrite backup
                Oldtable.Value = DailyTable.Value
    
                MsgBox "Backup Overwrite: COMPLETED [Week #" & Week.Value & "]", vbInformation + vbOKOnly
    
                '''Confirm Clear Data
                If vbNo <> MsgBox("Reset Daily Tracker [Clear Current Data]" & vbCrLf & _
                             "" & vbCrLf & _
                             "Are you SURE you want to reset the daily tracker?" & vbCrLf & _
                             "This canNOT be undone!", _
                             vbYesNo + vbCritical, "Confirm Daily Data Reset") Then
    
                '''Clear input form
                Clear_InputForm DailyWS
    
                '''Increases Daily Table Week # by 1 after reset.
                Week.Value = Week.Value + 1
    
                '''Notify User Backup Complete.
                    MsgBox "Backup & Data Reset: COMPLETED!" & vbCrLf & _
                             "" & vbCrLf & _
                             "[Daily Tracker is ready for the new week!]", vbInformation + vbOKOnly
    
                Else
                '''What to do if they don't want to overwrite?
                MsgBox "Data Reset: CANCELLED!", vbExclamation + vbOKOnly
    
                End If
            End If
        End If
    End Sub
    
    Private Sub Clear_InputForm(SheetToClean As Worksheet)
        '''Actual Range
        SheetToClean.Range("D8:L8,N8,O8,P8,Q8,D13:D19,F13:I19,K13:Q19").Select
        '''Test Range
        'SheetToClean.Range("D31,F31,G31,H31,I31,K31,L31,M31,N31,O31,P31,Q31").ClearContents
    
    End Sub
    
    Sub BackupData()
        'Declare the variable ranges.
        Dim tB As Workbook
        Dim DailyWS As Worksheet
        Dim DailyTable As Range
        Dim BackupWS As Worksheet
        Dim NewTable As Range
        Dim Oldtable As Range
        Dim Week As Range
        Dim LastWeek As Range
        Dim WeekBackup As Range
        Dim LastRow As Long
        Dim NextRow As Long
    
        Set tB = ThisWorkbook
        With tB
            Set BackupWS = .Sheets("Daily Tracker Backup")
            Set DailyWS = .Sheets("Daily Tracker")
        End With 'tB
        With DailyWS
            Set DailyTable = .Range("C7:Q21")
            Set Week = .Range("F4")
        End With 'DailyWS
        With BackupWS
            NextRow = .Range("C" & .Rows.Count).End(xlUp).Row + 1
            Set WeekBackup = .Range("A1").Offset(NextRow, 0)
            Set NewTable = .Range("C1:Q15").Offset(NextRow, 0)
            LastRow = .Range("A" & .Rows.Count).End(xlUp).Row - 1
            Set LastWeek = .Range("A1").Offset(LastRow, 0)
            Set Oldtable = .Range("C1:Q15").Offset(LastRow, 0)
        End With 'BackupWS
    
        If LastWeek.Value <> Week.Value Then
            '''Normal backup
            If vbYes <> MsgBox("Backing up your daily tracker sheet. You can do this anytime you'd like" & vbCrLf & _
                                "throughout the week. This will simply make a backup of your daily" & vbCrLf & _
                                "data in the 'Daily Tracker Backup' tab. Do you want to proceed?", vbYesNo + vbQuestion, _
                                "Backup Daily Tracker Data") Then
                '''Avoid backing up now
                MsgBox "BACKUP CANCELLED!", vbInformation + vbOKOnly
                Exit Sub
            Else
                '''Transfer the data
                    WeekBackup.Value = Week.Value
                    NewTable.Value = DailyTable.Value
    
                    '''Notify User Backup Complete.
                    MsgBox "BACKUP SUCCESSFUL: Week #" & Week, vbInformation + vbOKOnly
                    Exit Sub
                End If
            Else
    
            '''Data already present
            If vbYes <> MsgBox("This weeks daily data (Week #" & Week.Value & ") is already backedup," & vbCrLf & _
                        "do you want to update this backup [overwrite it]?", vbYesNo + vbQuestion, _
                        "Backup Data Exists") Then
                '''What to do if they don't want to overwrite?
                MsgBox "BACKUP CANCELLED!", vbInformation + vbOKOnly
                Exit Sub
            Else
    
                '''Overwrite backup
                Oldtable.Value = DailyTable.Value
    
                MsgBox "BACKUP OVEWRITE SUCCESSFUL: Week #" & Week.Value, vbInformation + vbOKOnly
    
                End If
            End If
    
    End Sub
    
    子ClearDailySheet()
    '声明变量范围。
    将tB设置为工作簿
    将日常工作作为工作表进行调整
    昏暗的日常工作台
    将备份设置为工作表
    可调范围
    将旧表变暗为范围
    暗淡的一周
    上周暗淡如射程
    暗淡的周备份范围
    最后一排一样长
    暗淡的下一步一样长
    设置tB=ThisWorkbook
    结核病
    设置备份=.Sheets(“每日跟踪备份”)
    设置DailyWS=.Sheets(“每日跟踪器”)
    以“tB”结尾
    每日新闻
    设置DailyTable=.Range(“C7:Q21”)
    设置周=.范围(“F4”)
    以“每日新闻”结尾
    背负
    NextRow=.Range(“C”和.Rows.Count).End(xlUp).Row+1
    设置WeekBackup=.Range(“A1”).Offset(下一步,0)
    设置新表=.Range(“C1:Q15”).Offset(下一步,0)
    LastRow=.Range(“A”&.Rows.Count).End(xlUp).Row-1
    设置LastWeek=.Range(“A1”).Offset(LastRow,0)
    设置旧表=.Range(“C1:Q15”).Offset(最后一行,0)
    以“后退”结束
    如果上周。价值周。价值那么
    ''正常备份
    如果vbYes MsgBox(“哎呀!您本周的每日跟踪器数据尚未备份,”&vbCrLf&_
    “在重置此表单之前,我们建议备份数据。是否继续备份?[建议]”,vbYesNo+vbQuestion_
    “缺少备份”)然后
    ''现在避免备份
    MsgBox“不建议在不备份本周数据的情况下重置每日工作表。”,vbequipment+vbOKOnly
    出口接头
    其他的
    ''传输数据
    WeekBackup.Value=Week.Value
    NewTable.Value=DailyTable.Value
    ''通知用户备份完成。
    MsgBox“备份:已完成[Week#”&Week.Value&“]”,vbInformation+vbOKOnly
    ''确认清晰的数据
    如果vbNo MsgBox(“重置每日跟踪器[清除当前数据]”&vbCrLf&_
    “”&vbCrLf&_
    “是否确实要重置每日跟踪器?”&vbCrLf&_
    “此操作无法撤消!”_
    vbYesNo+vbCritical,“确认每日数据重置”),然后
    ''清除输入表单
    清除\u输入表单DailyWS
    重置后,''增加每日表周1。
    周值=周值+1
    ''通知用户备份完成。
    MsgBox“备份和数据重置:完成!”&vbCrLf&_
    “”&vbCrLf&_
    “[Daily Tracker已准备好迎接新的一周!]”,vbInformation+vbOKOnly
    其他的
    ''如果他们不想覆盖怎么办?
    MsgBox“数据重置已取消”,VBEQUOTION+vbOKOnly
    出口接头
    如果结束
    如果结束
    其他的
    ''数据已经存在
    如果vbYes MsgBox(“本周跟踪数据(周#“&week.Value&”)显示已备份,”&vbCrLf&_
    “是否要在重置跟踪器之前用最新数据覆盖旧备份?[建议]”,vbYesNo+vbQuestion_
    “备份数据存在”),然后
    ''如果他们不想覆盖怎么办?
    MsgBox“备份和数据重置:已取消!”,VBEQUOTION+vbOKOnly
    其他的
    ''覆盖备份
    Oldtable.Value=DailyTable.Value
    MsgBox“备份覆盖:已完成[Week#”&Week.Value&“]”,vbInformation+vbOKOnly
    ''确认清晰的数据
    如果vbNo MsgBox(“重置每日跟踪器[清除当前数据]”&vbCrLf&_
    “”&vbCrLf&_
    “是否确实要重置每日跟踪器?”&vbCrLf&_
    “此操作无法撤消!”_
    vbYesNo+vbCritical,“确认每日数据重置”),然后
    ''清除输入表单
    清除\u输入表单DailyWS
    重置后,''增加每日表周1。
    周值=周值+1
    ''通知用户备份完成。
    MsgBox“备份和数据重置:完成!”&vbCrLf&_
    “”&vbCrLf&_
    “[Daily Tracker已准备好迎接新的一周!]”,vbInformation+vbOKOnly
    其他的
    ''如果他们不想覆盖怎么办?
    MsgBox“数据重置:取消
    
    Sub ClearDailySheet()
        'Declare the variable ranges.
        Dim tB As Workbook
        Dim DailyWS As Worksheet
        Dim DailyTable As Range
        Dim BackupWS As Worksheet
        Dim NewTable As Range
        Dim Oldtable As Range
        Dim Week As Range
        Dim LastWeek As Range
        Dim WeekBackup As Range
        Dim LastRow As Long
        Dim NextRow As Long
    
        Set tB = ThisWorkbook
        With tB
            Set BackupWS = .Sheets("Daily Tracker Backup")
            Set DailyWS = .Sheets("Daily Tracker")
        End With 'tB
        With DailyWS
            Set DailyTable = .Range("C7:Q21")
            Set Week = .Range("F4")
        End With 'DailyWS
        With BackupWS
            NextRow = .Range("C" & .Rows.Count).End(xlUp).Row + 1
            Set WeekBackup = .Range("A1").Offset(NextRow, 0)
            Set NewTable = .Range("C1:Q15").Offset(NextRow, 0)
            LastRow = .Range("A" & .Rows.Count).End(xlUp).Row - 1
            Set LastWeek = .Range("A1").Offset(LastRow, 0)
            Set Oldtable = .Range("C1:Q15").Offset(LastRow, 0)
        End With 'BackupWS
    
        If LastWeek.Value <> Week.Value Then
            '''Normal backup
            If vbYes <> MsgBox("Oops! Your daily tracker data for this week has not yet been backed up," & vbCrLf & _
                                "before resetting this form we recommend backing up your data. Proceed with backup? [RECOMMENDED]", vbYesNo + vbQuestion, _
                                "Missing Backup") Then
                '''Avoid backing up now
                MsgBox "It is NOT recommended to reset the daily sheet without backing up this week's data.", vbExclamation + vbOKOnly
                Exit Sub
            Else
                '''Transfer the data
                    WeekBackup.Value = Week.Value
                    NewTable.Value = DailyTable.Value
    
                    '''Notify User Backup Complete.
                    MsgBox "Backup: COMPLETED [Week #" & Week.Value & "]", vbInformation + vbOKOnly
    
                    '''Confirm Clear Data
                If vbNo <> MsgBox("Reset Daily Tracker [Clear Current Data]" & vbCrLf & _
                             "" & vbCrLf & _
                             "Are you SURE you want to reset the daily tracker?" & vbCrLf & _
                             "This canNOT be undone!", _
                             vbYesNo + vbCritical, "Confirm Daily Data Reset") Then
    
                    '''Clear input form
                    Clear_InputForm DailyWS
    
                    '''Increases Daily Table Week # by 1 after reset.
                    Week.Value = Week.Value + 1
    
                    '''Notify User Backup Complete.
                    MsgBox "Backup & Data Reset: COMPLETED!" & vbCrLf & _
                             "" & vbCrLf & _
                             "[Daily Tracker is ready for the new week!]", vbInformation + vbOKOnly
                Else
                    '''What to do if they don't want to overwrite?
                    MsgBox "Data Reset CANCELLED", vbExclamation + vbOKOnly
                    Exit Sub
                End If
            End If
        Else
            '''Data already present
            If vbYes <> MsgBox("This weeks tracker data (week #" & Week.Value & ") appears to be backed up already," & vbCrLf & _
                        "do you want to overwrite the old backup with the latest data before resetting the tracker? [RECOMENDED]", vbYesNo + vbQuestion, _
                        "Backup Data Exists") Then
                '''What to do if they don't want to overwrite?
                MsgBox "Backup & Data Reset: CANCELLED!", vbExclamation + vbOKOnly
            Else
                '''Overwrite backup
                Oldtable.Value = DailyTable.Value
    
                MsgBox "Backup Overwrite: COMPLETED [Week #" & Week.Value & "]", vbInformation + vbOKOnly
    
                '''Confirm Clear Data
                If vbNo <> MsgBox("Reset Daily Tracker [Clear Current Data]" & vbCrLf & _
                             "" & vbCrLf & _
                             "Are you SURE you want to reset the daily tracker?" & vbCrLf & _
                             "This canNOT be undone!", _
                             vbYesNo + vbCritical, "Confirm Daily Data Reset") Then
    
                '''Clear input form
                Clear_InputForm DailyWS
    
                '''Increases Daily Table Week # by 1 after reset.
                Week.Value = Week.Value + 1
    
                '''Notify User Backup Complete.
                    MsgBox "Backup & Data Reset: COMPLETED!" & vbCrLf & _
                             "" & vbCrLf & _
                             "[Daily Tracker is ready for the new week!]", vbInformation + vbOKOnly
    
                Else
                '''What to do if they don't want to overwrite?
                MsgBox "Data Reset: CANCELLED!", vbExclamation + vbOKOnly
    
                End If
            End If
        End If
    End Sub
    
    Private Sub Clear_InputForm(SheetToClean As Worksheet)
        '''Actual Range
        SheetToClean.Range("D8:L8,N8,O8,P8,Q8,D13:D19,F13:I19,K13:Q19").Select
        '''Test Range
        'SheetToClean.Range("D31,F31,G31,H31,I31,K31,L31,M31,N31,O31,P31,Q31").ClearContents
    
    End Sub
    
    Sub BackupData()
        'Declare the variable ranges.
        Dim tB As Workbook
        Dim DailyWS As Worksheet
        Dim DailyTable As Range
        Dim BackupWS As Worksheet
        Dim NewTable As Range
        Dim Oldtable As Range
        Dim Week As Range
        Dim LastWeek As Range
        Dim WeekBackup As Range
        Dim LastRow As Long
        Dim NextRow As Long
    
        Set tB = ThisWorkbook
        With tB
            Set BackupWS = .Sheets("Daily Tracker Backup")
            Set DailyWS = .Sheets("Daily Tracker")
        End With 'tB
        With DailyWS
            Set DailyTable = .Range("C7:Q21")
            Set Week = .Range("F4")
        End With 'DailyWS
        With BackupWS
            NextRow = .Range("C" & .Rows.Count).End(xlUp).Row + 1
            Set WeekBackup = .Range("A1").Offset(NextRow, 0)
            Set NewTable = .Range("C1:Q15").Offset(NextRow, 0)
            LastRow = .Range("A" & .Rows.Count).End(xlUp).Row - 1
            Set LastWeek = .Range("A1").Offset(LastRow, 0)
            Set Oldtable = .Range("C1:Q15").Offset(LastRow, 0)
        End With 'BackupWS
    
        If LastWeek.Value <> Week.Value Then
            '''Normal backup
            If vbYes <> MsgBox("Backing up your daily tracker sheet. You can do this anytime you'd like" & vbCrLf & _
                                "throughout the week. This will simply make a backup of your daily" & vbCrLf & _
                                "data in the 'Daily Tracker Backup' tab. Do you want to proceed?", vbYesNo + vbQuestion, _
                                "Backup Daily Tracker Data") Then
                '''Avoid backing up now
                MsgBox "BACKUP CANCELLED!", vbInformation + vbOKOnly
                Exit Sub
            Else
                '''Transfer the data
                    WeekBackup.Value = Week.Value
                    NewTable.Value = DailyTable.Value
    
                    '''Notify User Backup Complete.
                    MsgBox "BACKUP SUCCESSFUL: Week #" & Week, vbInformation + vbOKOnly
                    Exit Sub
                End If
            Else
    
            '''Data already present
            If vbYes <> MsgBox("This weeks daily data (Week #" & Week.Value & ") is already backedup," & vbCrLf & _
                        "do you want to update this backup [overwrite it]?", vbYesNo + vbQuestion, _
                        "Backup Data Exists") Then
                '''What to do if they don't want to overwrite?
                MsgBox "BACKUP CANCELLED!", vbInformation + vbOKOnly
                Exit Sub
            Else
    
                '''Overwrite backup
                Oldtable.Value = DailyTable.Value
    
                MsgBox "BACKUP OVEWRITE SUCCESSFUL: Week #" & Week.Value, vbInformation + vbOKOnly
    
                End If
            End If
    
    End Sub
    
    Sub BackupTable()
        Dim tB As Workbook
        Dim DailyWS As Worksheet
        Dim DailyTable As Range
        Dim BackupWS As Worksheet
        Dim NewTable As Range
        Dim Week As Range
        Dim WeekBackup As Range
        'Dim WeekCurrent As String
        'Dim WeekNext As String
        Dim NextRow As Long
    
        Set tB = ThisWorkbook
        With tB
            Set BackupWS = .Sheets("Daily Backup")
            Set DailyWS = .Sheets("Daily Tracker")
        End With 'tB
        With DailyWS
            Set DailyTable = .Range("C7:Q21")
            Set Week = .Range("F4")
        End With 'DailyWS
        With BackupWS
            NextRow = .Range("C" & .Rows.Count).End(xlUp).Row + 1
            Set WeekBackup = .Range("A1").Offset(NextRow, 0)
            Set NewTable = .Range("C1:Q15").Offset(NextRow, 0)
        End With 'BackupWS
    
        '''Transfer the data
        WeekBackup.Value = Week.Value
        NewTable.Value = DailyTable.Value
    
        '''Apply RemoveDuplicates (2 parameters):
        '''(the array tells which columns it should take into accout to detect duplicates)
        '''(xlGuess let excel guess if you have Headers, or set it to xlYes or xlNo)
        Call BackupWS.UsedRange.RemoveDuplicates(Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17), xlGuess)
    
        '''Increases Daily Table Week # by 1.
        Week.Value = Week.Value + 1
    End Sub
    
        'Declare the variable ranges.
        Dim tB As Workbook
        Dim DailyWS As Worksheet
        Dim DailyTable As Range
        Dim BackupWS As Worksheet
        Dim NewTable As Range
        Dim Oldtable As Range
        Dim Week As Range
        Dim LastWeek As Range
        Dim WeekBackup As Range
        Dim LastRow As Long
        Dim NextRow As Long
    
        Set tB = ThisWorkbook
        With tB
            Set BackupWS = .Sheets("Daily Tracker Backup")
            Set DailyWS = .Sheets("Daily Tracker")
        End With 'tB
        With DailyWS
            Set DailyTable = .Range("C7:Q21")
            Set Week = .Range("F4")
        End With 'DailyWS
        With BackupWS
            NextRow = .Range("C" & .Rows.Count).End(xlUp).Row + 1
            Set WeekBackup = .Range("A1").Offset(NextRow, 0)
            Set NewTable = .Range("C1:Q15").Offset(NextRow, 0)
            LastRow = .Range("A" & .Rows.Count).End(xlUp).Row - 1
            Set LastWeek = .Range("A1").Offset(LastRow, 0)
            Set Oldtable = .Range("C1:Q15").Offset(LastRow, 0)
        End With 'BackupWS
    
        If LastWeek.Value <> Week.Value Then
            '''Normal backup
            If vbYes <> MsgBox("Your daily tracker data has not been backed up," & vbCrLf & _
                                "do you want to backup your data up now?", vbYesNo + vbQuestion, _
                                "Missing Backup for this Week") Then
                '''Avoid backing up now
                Exit Sub
            Else
                '''Confirm Clear Data
                If vbNo <> MsgBox("This will reset this section." & vbCrLf & _
                                "Are you SURE you want to reset your daily data sheet?" & vbCrLf & _
                                "This canNOT be undone!", _
                                vbYesNo + vbCritical, "Confirm Daily Data Wipe") Then
                    '''Transfer the data
                    WeekBackup.Value = Week.Value
                    NewTable.Value = DailyTable.Value
    
                    '''Clear input form
                    Clear_InputForm DailyWS
    
                    '''Increases Daily Table Week # by 1 after reset.
                    Week.Value = Week.Value + 1
                    '''Notify User Backup Complete.
                    MsgBox "BACKUP COMPLETE: Week #" & Week, vbInformation + vbOKOnly
                Else
                    '''What to do if they don't want to overwrite?
                    Exit Sub
                End If
            End If
        Else
            '''Data already present
            If vbYes <> MsgBox("This weeks (" & Week.Value & ") daily data appears to be backedup already," & vbCrLf & _
                        "do you want to overwrite the existing backup?", vbYesNo + vbQuestion, _
                        "Backup Data Exists") Then
                '''What to do if they don't want to overwrite?
                Exit Sub
            Else
                '''Overwrite backup
                Oldtable.Value = DailyTable.Value
    
                '''Clear input form
                Clear_InputForm DailyWS
    
                MsgBox "BACKUP OVEWRITE COMPLETE: Week #" & Week.Value, vbInformation + vbOKOnly
            End If
        End If
    End Sub
    
    Private Sub Clear_InputForm(SheetToClean As Worksheet)
        '''Actual Range (avoid using select which is slow)
        'SheetToClean.Range("D8:L8,N8,O8,P8,Q8,D13:D19,F13:I19,K13:Q19").ClearContents
        '''Test Range (use select to see which range you are gonna clear)
        SheetToClean.Range("D31,F31,G31,H31,I31,K31,L31,M31,N31,O31,P31,Q31").Select
        'Selection.ClearContents
    End Sub