具有基于日期的可变行输入的Excel宏

时间:2014-01-13 10:38:52

标签: excel excel-vba vba

我正在尝试设置一个macro,为了论证起作用,这样做:
监测特定鸟类的每日目击。 Column 'A'代表column 'B'的日期,代表不同的鸟类 每列都有一个按钮,每个按钮都有一个键盘快捷键 我想要的是单击按钮时将按钮添加到当天相应行中的单元格 因此,在1月20日,按钮将添加到一个单元格,并在21日,下面的单元格...

我在这方面寻找线索,但我正在画一个空白。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我写了一些代码,这段代码假设A列的格式为“m / d / yyyy”,第1行是您通过工作表追踪的不同鸟类的列表,并且您在同一张工作表上有表单按钮,其中包含与第1行完全相匹配的鸟的名称。 (例如,C1你有“Brown Wren”,然后你有一个表格按钮,上面有“Brown Wren”)

Option Explicit
Public ws As Worksheet

Private Sub AddBirdSighting(ByVal rng As Range)

    If rng Is Nothing Then
        Debug.Print "Invalid range"
        Exit Sub
    End If

    rng.Value = rng.Value + 1

End Sub

Private Function GetRange(ByVal Bird As String, ByVal Today As Date) As Range

    Dim c As Integer
    Dim r As Integer

    c = ws.Range("1:1").Find(Bird, LookIn:=xlValues).Column
    r = ws.Range("A:A").Find(Today, LookIn:=xlValues).Row

    Set GetRange = ws.Cells(r, c)

End Function

Public Sub CommandButtonClick()

    Set ws = ThisWorkbook.Sheets("Sheet1")

    Dim ctl As String
    Dim btn As String

    ctl = Application.Caller
    btn = ws.Buttons(ctl).Text

    AddBirdSighting GetRange(btn, Format(DateTime.Now, "m/d/yyyy"))

End Sub

将此代码复制/粘贴到VBA中的模块中,并将CommandButtonClick过程分配给所有按钮。如果您需要任何解释,请告诉我,我会详细介绍。