选中复选框会将今天的日期放在右侧相同的第6行单元格中

时间:2012-01-30 04:06:36

标签: excel-vba vba excel

我在Excel 2010中设计一个表单,通过选中“YES”表单控件框来输入列表中每个任务完成的日期。我已经将每个表单控件框下面的单元格指定为该框的单元格链接,我希望宏在该单元格中开始,然后偏移到右边6个单元格并放置今天的日期。偏移函数并不难,但我不知道如何让宏在链接单元格中启动,因为单击该框不会选择单元格,因此活动单元格对象似乎对我不起作用。因为每个框的行不同,所以范围对象需要根据我检查的框而改变,否则我回到为每行编写代码。

第二个问题是如果已经选中了该框,我不希望每次打开工作簿时都将其更改为今天。一旦我检查它,它应该放入日期,然后保持不变。这可能很简单,但我似乎无法做到正确。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用代码编辑器上方的对象和事件导航下拉列表,为每个复选框添加CheckBox Changed事件,以便在每次单击复选框时将活动单元格设置为适当的单元格。您还可以执行验证,确保此时当前选中了复选框。

Private Sub CheckBox1_Click()
    If Me.CheckBox1.Value = True Then
        ActiveSheet.Cells(x, y).Select
    End If
End Sub

xy是适合您实施的值。如果您有很多复选框,我建议将此逻辑封装到一个公共函数中,并从各种复选框更改事件中调用它来清理代码,但此方法将为您提供正确的行为。

答案 1 :(得分:1)

将此宏(在常规模块中)分配给所有复选框:

Sub CheckBoxUpdated()

Dim cb As CheckBox

    On Error Resume Next
    Set cb = ActiveSheet.DrawingObjects(Application.Caller)
    On Error GoTo 0

    If Not cb Is Nothing Then
        If cb.Value = 1 Then
           ActiveSheet.Range(cb.LinkedCell).Offset(0, 6).Value = Date
        End If
    End If

End Sub