宏以更改日期来移动数据

时间:2013-03-27 13:53:53

标签: excel excel-vba vba

对不起,如果没有解释得太好,我是一个宏新手,所以我不确定这个是否可能..

我希望为一些简单的统计报告创建工作日表,每天自动创建一个新行,并删除最旧的行,显示当天和之前6天的数据。理想情况下,我希望当前在表格的顶部,并且每天相应行中输入的数据向下移动1行,为新的一天的统计数据创建空间。

作为一些背景信息,我试图做什么..我基本上创建一个友好的UI显示(离线HTML)的数据记录在一个非常简单的5列(统计)由7行(工作日)表。这个数据库需要由技术能力有限的多个人更新,所以我基本上试图让他们每天输入统计数据尽可能容易,而不必担心更新到正确的日期并确保他们正在更换从理论上讲,每天更新表格的过程自动化,以便为他们输入当前天数数据,将昨天数据推下一行(如果整个表格的单元格范围)总是一样的,它应该允许我自动更新离线HTML显示。)

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

首先给日期标题单元格命名。 (单击单元格。查看屏幕左上方出现单元格坐标。“A1”,“B2”等... 在该文本框中,键入标题名称:“MyDateHeader”

然后,使用此宏(您可以将其添加到工作簿打开事件,或激活)

Sub YourMacro()

    Dim DateHeader As Range
    Set DateHeader = Range("MyDateHeader")

    Dim FirstDateCell As Range
    Set FirstDateCell = DateHeader.Offset(1, 0)


    Dim MyDay As Integer, MyMonth As Integer, MyYear As Integer
    Dim CurrDay As Integer, CurrMonth As Integer, CurrYear As Integer

    MyDay = Day(FirstDateCell.Value)
    MyMonth = Month(FirstDateCell.Value)
    MyYear = Year(FirstDateCell.Value)

    CurrDay = Day(Date)
    CurrMonth = Month(Date)
    CurrYear = Year(Date)


    If (MyDay <> CurrDay) Or (MyMonth <> CurrMonth) Or (MyYear <> CurrYear) Then
        FirstDateCell.EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
        DateHeader.Offset(1, 0).Value = Date 'Careful, FirstDateCell has moved down.
        DateHeader.Offset(8, 0).EntireRow.Clear
    End If

End Sub

答案 1 :(得分:0)

这应该让你开始:

Sub WeekdayTable()

Dim tbl As Range
Dim r As Integer

Set tbl = Range("A1:E7") 'Define your table, 5 columns x 7 rows. Modify as needed.

For r = tbl.Rows.Count To 2 Step -1
    tbl.Rows(r).Value = tbl.Rows(r - 1).Value
Next

'empty out row 1
tbl.Rows(1).Clear

'Assuming the column 1 contains valid DATE values, _
' we can use the DateAdd function to print the next date:
tbl.Cells(1, 1) = DateAdd("d", 1, tbl.Cells(2, 1))

End Sub