0

抱歉,如果没有很好地解释这一点,我是一个宏新手,所以我不确定这是否可能..

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

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

有任何想法吗?

4

2 回答 2

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
于 2013-03-27T14:15:36.143 回答
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
于 2013-03-27T14:16:51.983 回答