Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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 工作表(U变化不#x27 ;;似乎不会触发_Vba_Excel_Macros - Fatal编程技术网

Vba 工作表(U变化不#x27 ;;似乎不会触发

Vba 工作表(U变化不#x27 ;;似乎不会触发,vba,excel,macros,Vba,Excel,Macros,我启动并运行了一个宏,它对透视表进行排序,从表中复制一系列单元格,然后将它们粘贴到第二张表中。老实说,就我目前在VBA的工作而言,单凭这项壮举我就感到非常高兴。但我还有更多的事情要做 我想做的是:我的宏将数据粘贴到A列的第一个空单元格中。当这种情况发生时,我希望宏在C列的同一行中输入今天的日期(最好是永久性的,不会更改为明天的日期),并在D列中输入文本“IV020” 在第9页中,我有以下代码(主要取自此处的帖子): 选项显式 私有子工作表_更改(ByVal目标作为范围) Dim aCell As

我启动并运行了一个宏,它对透视表进行排序,从表中复制一系列单元格,然后将它们粘贴到第二张表中。老实说,就我目前在VBA的工作而言,单凭这项壮举我就感到非常高兴。但我还有更多的事情要做

我想做的是:我的宏将数据粘贴到A列的第一个空单元格中。当这种情况发生时,我希望宏在C列的同一行中输入今天的日期(最好是永久性的,不会更改为明天的日期),并在D列中输入文本“IV020”

在第9页中,我有以下代码(主要取自此处的帖子):

选项显式
私有子工作表_更改(ByVal目标作为范围)
Dim aCell As系列
关于错误转到哇
Application.EnableEvents=False
如果不相交(目标,列(1))为空,则
如果不是Target.Columns.Count>1,则
对于目标中的每个aCell
如果aCell.Value“”和aCell.Offset(0,2).NumberFormat=“”则
aCell.Offset(0,2).Value=“=TODAY()”
aCell.Offset(0,3).Value=“IV020”
如果结束
下一个
其他的
MsgBox“请在1列中粘贴”
如果结束
如果结束
让我们继续:
Application.EnableEvents=True
出口接头
哇
MsgBox错误说明
继续
端接头
然而,当东西被粘贴或手动输入到A列中时,什么也没有发生

不能有长度为零的字符串。即使您尝试手动输入一个,它也会将自身重置为常规

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Columns(1)) Is Nothing Then
        'don't do things until you have to
        On Error GoTo Whoa
        Application.EnableEvents = False
        Dim aCell As Range
        'this processes all of the cells that were changes in column A
        For Each aCell In Intersect(Target, Columns(1))
            'If aCell.Value <> "" And aCell.Offset(0, 2).NumberFormat = "" Then
            If aCell.Value <> "" Then
                aCell.Offset(0, 2).Value = Date   'possibly Now but likely not "=TODAY()"
                aCell.Offset(0, 3).Value = "IV020"
            End If
        Next
    End If

Letscontinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果不相交(目标,列(1))为空,则
“在你不得不做之前不要做任何事情
关于错误转到哇
Application.EnableEvents=False
Dim aCell As系列
'这将处理列A中发生更改的所有单元格
对于Intersect中的每个aCell(目标,列(1))
'如果aCell.Value“”和aCell.Offset(0,2).NumberFormat=“”,则
如果aCell.Value为“”,则
aCell.Offset(0,2).Value=Date'可能是现在,但可能不是“=TODAY()
aCell.Offset(0,3).Value=“IV020”
如果结束
下一个
如果结束
让我们继续:
Application.EnableEvents=True
出口接头
哇
MsgBox错误说明
继续
端接头

我做了一些小改动;您必须决定如何处理.NumberFormat问题。

代码是在
工作表中的
模块,而不是标准模块吗?也可以在即时窗口类型
?应用程序中检查事件是否已明确启用。EnableEvents
并单击enter,它应该返回
True
转到VBE([Ctrl]+G)并粘贴到
应用程序中。EnableEvents=True
然后单击enter。它可能已被禁用,然后崩溃并且从未重新启用。?Application.EnableEvents返回True。我很确定代码在工作表模块中,它在VBAPProject窗口的Sheet9中。您现有的宏在运行时是否禁用了事件?@Rory我只是查看了代码,没有。这很有效,谢谢!如果我读对了,引起我最大问题的实际上是.NumberFormat=“”部分?(从我现在看,这其实不是必须的)是的,没错。因为其中一个条件是数字格式必须是零长度的字符串,数字格式永远不能是零长度的字符串,所以您总是会达到这一点,并且无法满足这些条件。
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Columns(1)) Is Nothing Then
        'don't do things until you have to
        On Error GoTo Whoa
        Application.EnableEvents = False
        Dim aCell As Range
        'this processes all of the cells that were changes in column A
        For Each aCell In Intersect(Target, Columns(1))
            'If aCell.Value <> "" And aCell.Offset(0, 2).NumberFormat = "" Then
            If aCell.Value <> "" Then
                aCell.Offset(0, 2).Value = Date   'possibly Now but likely not "=TODAY()"
                aCell.Offset(0, 3).Value = "IV020"
            End If
        Next
    End If

Letscontinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub