Excel VBA在输入时运行

Excel VBA在输入时运行,vba,excel,Vba,Excel,我从来没有用VBA写过任何东西。我有一个秤,可以称量项目并将其输入excel。然而,当我称某物时,它会读取一个读数,当秤在两次称重之间为空时,它也会记录一个读数。我正在努力消除D列中的空白读数。它确实需要在电子表格的每个条目上发生 如果我手动运行此代码,它将正常工作。如何包装它以使其自动执行?此外,请仔细解释如何激活代码。无论出于什么原因,我的网络搜索结果都不清楚 Sub clean_input_data() Dim i As Long With Application .Screen

我从来没有用VBA写过任何东西。我有一个秤,可以称量项目并将其输入excel。然而,当我称某物时,它会读取一个读数,当秤在两次称重之间为空时,它也会记录一个读数。我正在努力消除D列中的空白读数。它确实需要在电子表格的每个条目上发生

如果我手动运行此代码,它将正常工作。如何包装它以使其自动执行?此外,请仔细解释如何激活代码。无论出于什么原因,我的网络搜索结果都不清楚

Sub clean_input_data()
Dim i As Long

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With

With ActiveSheet
    If .AutoFilterMode Then .AutoFilterMode = False
    i = .Range("D" & Rows.Count).End(xlUp).row
    If i < 2 Then
        MsgBox "No data found, macro exiting"
        Exit Sub
    Else
        With .Range("D1:D" & i)
            .AutoFilter
            .AutoFilter field:=1, Criteria1:="<=0.005", Operator:=xlAnd
        End With
    End If
    .UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).Rows.Delete
    .AutoFilterMode = False
End With


With Application
    .ScreenUpdating = True
    .DisplayAlerts = True
End With

End Sub
Sub-clean_输入_数据()
我想我会坚持多久
应用
.ScreenUpdate=False
.DisplayAlerts=False
以
使用ActiveSheet
如果.AutoFilterMode,则.AutoFilterMode=False
i=.Range(“D”和Rows.Count).End(xlUp).row
如果我小于2,那么
MsgBox“未找到数据,宏正在退出”
出口接头
其他的
带.Range(“D1:D”和i)
.自动过滤器

.AutoFilter字段:=1,Criteria1:=“尝试将以下子例程放置在包含测量值的工作表选项卡中:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target.Parent.Range("D:D"), Target) Is Nothing Then
        Application.EnableEvents = False
        Run "clean_input_data"
        Application.EnableEvents = True
    End If
End Sub

我刚刚看到David的回答,我想他有一个更好的主意。

“我有一个秤,可以称量项目并将其输入excel“-这在实践中到底是什么样的?是什么触发了一个新条目,每个新条目放在哪里?可能是通过使用
工作表\u Change
事件,并添加一些逻辑来忽略条目==0(或工作表中注册的任何“空”刻度)Tim。我正在运行rs232键软件。这是一个“键盘楔”软件。它从串行端口读取输入数据并将其放入键盘缓冲区。电子秤在感测到新重量并稳定后发送数据(因此它记录加载和卸载)。该值从键盘缓冲区输入excel,之后输入。因此,在Excel中,数据由rs232软件输入,然后为我点击回车键。我想删除“已卸载”行。如果您是在谈论我的答案,用户只需使用他已经找到的子例程即可。至于David的评论,您可能会有这样的内容:
TempRange=Intersect(Target.Parent.Range(“D:D”),Target)
然后
对于TempRange中的每个单元格
,如果ABS(Cell.Value)这似乎创建了某种无休止的循环,调试指向“.AutoFilter字段:=1,准则1:=“是的,您是对的。很抱歉,我忘记添加一些东西来禁用事件。请看修改后的答案。啊。我看到了@Demetri。抱歉,我正在考虑“清除”工作表\u Change事件中的错误条目+1用于轻松集成:)