【问题标题】:Automatic Date Entered after userform data entered输入用户表单数据后自动输入日期
【发布时间】:2017-03-14 19:27:01
【问题描述】:

一旦我通过“输入/单击”按钮从 User_Form 输入数据后,有没有一种方法可以自动执行日期或时间?我已经尝试过这段代码,但它一直在重新启动我的 Excel 工作簿。最重要的是,我在Private Sub Worksheet_Change(ByVal Target As Range) 中有大量其他代码

它可能超载吗?

所以我在想如果我可以用我的 Userform_click() 来编写代码会更好吗?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Integer

For i = 16 To 100 
    If Cells(i, 3).Value <> "" Then
        Cells(i, 1).Value = Date & " " 
        Cells(i, 1).NumberFormat = "mm/dd/yy"
    End If
Next

End Sub

【问题讨论】:

  • 你的处理程序是递归的,没有出路。每次单元格更改时,处理程序都会运行,并且它会更改单元格,然后再次运行处理程序,然后更改单元格,然后再次运行处理程序,这最终会炸毁调用堆栈并将所有内容都付之一炬。

标签: vba excel userform


【解决方案1】:

您需要在Sub 的开头添加Application.EnableEvents = False,否则每次在工作表中更改值时(例如在For i = 16 To 100 循环中更改值时)它都会继续运行。

代码

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Integer

Application.EnableEvents = False

For i = 16 To 100
    If Cells(i, 3).Value <> "" Then
        Cells(i, 1).Value = Date & " "
        Cells(i, 1).NumberFormat = "mm/dd/yy"
    End If
Next i
Application.EnableEvents = True '<-- restore to original setting

End Sub

编辑1:你可以用另一种方式写你的Sub,只有当搜索到的Range("C16:C100")中的单元格发生变化时,它才会输入它。仅当修改的单元格在该范围内时,检查每个单元格是否为Value &lt;&gt; ""

Private Sub Worksheet_Change(ByVal Target As Range)

Dim C As Range

Application.EnableEvents = False
If Not Intersect(Range("C16:C100"), Target) Is Nothing Then
    For Each C In Intersect(Range("C16:C100"), Target)
        If C.Value <> "" Then
            C.Offset(, -2).Value = Date & " "
            C.Offset(, -2).NumberFormat = "mm/dd/yy"
        End If
    Next C
End If
Application.EnableEvents = True

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多