Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在输入用户表单数据后自动输入日期_Vba_Excel_Userform - Fatal编程技术网

Vba 在输入用户表单数据后自动输入日期

Vba 在输入用户表单数据后自动输入日期,vba,excel,userform,Vba,Excel,Userform,一旦我通过“输入/单击”按钮从用户表单中输入数据,是否有一种方法可以自动确定日期或时间?我尝试了此代码,但它一直在重新启动我的excel工作簿。除此之外,我在Private子工作表\u Change(ByVal Target作为范围) 有可能超载了吗 所以我在想,如果我能用我的Userform_click()编写代码,我会更好吗 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer For i = 16 To

一旦我通过“输入/单击”按钮从用户表单中输入数据,是否有一种方法可以自动确定日期或时间?我尝试了此代码,但它一直在重新启动我的excel工作簿。除此之外,我在
Private子工作表\u Change(ByVal Target作为范围)

有可能超载了吗

所以我在想,如果我能用我的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
Private子工作表\u更改(ByVal目标作为范围)
作为整数的Dim i
对于i=16到100
如果单元格(i,3).的值为“”,则
单元格(i,1)。值=日期
单元格(i,1).NumberFormat=“mm/dd/yy”
如果结束
下一个
端接头

您需要将
Application.EnableEvents=False
添加到
子文件的开头,否则每次在工作表中更改值时,它都会继续运行该文件(例如,当您在
中更改i=16到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

您的处理程序是递归的,没有出路。处理程序在每次单元格更改时运行,它会更改单元格,这会再次运行处理程序,这会更改单元格,这会再次运行处理程序,这。。。这最终会炸毁调用堆栈,并使所有内容付之一炬。
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