Vba 为工具的输入/输出跟踪编码,无重复,条形码扫描仪输入的文本始终添加到文本中,而不是删除

Vba 为工具的输入/输出跟踪编码,无重复,条形码扫描仪输入的文本始终添加到文本中,而不是删除,vba,excel,Vba,Excel,我试图在MicrosoftExcel中创建一个代码,当另一个单元格被填充时,它会将一个文本放入一个单元格中 我要寻找的是,当单元格A被填充时,例如,单元格C被填充为OUT。然后,当在下一行或其下的另一行上再次填充单元格A时,在与单元格A相同的行上填充单元格C 我们想利用条形码扫描仪检查工具的进出。我已经知道如何让条形码扫描到A列 我希望这一过程能够反复进行 它应该是一个跟踪表,记录工具何时被取出并重新入库。文本将不断添加,而不会删除任何内容。我们想利用条形码扫描仪检查工具的进出。员工扫描指示他们

我试图在MicrosoftExcel中创建一个代码,当另一个单元格被填充时,它会将一个文本放入一个单元格中

我要寻找的是,当单元格A被填充时,例如,单元格C被填充为OUT。然后,当在下一行或其下的另一行上再次填充单元格A时,在与单元格A相同的行上填充单元格C

我们想利用条形码扫描仪检查工具的进出。我已经知道如何让条形码扫描到A列

我希望这一过程能够反复进行


它应该是一个跟踪表,记录工具何时被取出并重新入库。文本将不断添加,而不会删除任何内容。我们想利用条形码扫描仪检查工具的进出。员工扫描指示他们的条形码,然后扫描指示他们正在使用的工具的工具。然后当他们回来时,他们再次扫描条形码,然后将工具扫描回库存。当然,只要有这个简单的设置,就会导致一个混乱的问题,即工具是进还是出,以及谁最后使用了它,因为我们有一群员工不断地进进出出工具。这样我们就可以确定谁最后使用了什么工具,以及它是在里面还是在外面

下面是我需要的时间戳编码

Private Sub Worksheet_Change(ByVal Target As Range)
Dim B As Range, AC As Range, t As Range

Set B = Range("B:B")
Set AC = Range("A:A")
Set t = Target

If Intersect(t, AC) Is Nothing Then Exit Sub

Application.EnableEvents = False
Range("B" & t.Row).Value = Now
Application.EnableEvents = True
End Sub

您可以使用工作表“IF()”公式来代替VBA

=IF(A3="","","OUT")
=IF(A4="","","IN")
要分解它,这意味着如果单元格A3=nothing(“”),则在单元格C3中放入nothing(“”),但如果单元格A3中有内容,则放入“OUT”

将第一个公式放在单元格C3中,将第二个公式放在单元格C4中。如果工具的用户在单元格A3中输入他们的首字母缩写/名称,则单元格C3将显示出来。直到用户返回工具并在单元格A4中输入他们的首字母缩写/姓名,单元格C4才会在单元格A4中显示


希望这个简单,非VBA的例子有帮助

这听起来像是一个非常做作的例子,提出了“在VBA中,如何用特定字符串填充Excel单元格?”

这个问题的答案是:

myRange.Value = "<myString>"
编辑:

针对询问者的意见,以下修改代码应解决该问题:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rngChange As Range
    Dim rngIntersect As Range
    Dim inOut As String

    Set rngChange = Range("A:A")
    Set rngIntersect = Intersect(Target, rngChange)

    If Not rngIntersect Is Nothing Then
        Application.EnableEvents = False

            If rngIntersect.Row = 1 Then
                inOut = "OUT"
            ElseIf rngIntersect.Offset(-1, 2).Value = "OUT" Then
                inOut = "IN"
            Else
                inOut = "OUT"
            End If


            rngIntersect.Offset(0, 1).Value = Now
            rngIntersect.Offset(0, 2).Value = inOut
        Application.EnableEvents = True
    End If

End Sub
Edit2:

使用此选项可在日志中向后循环,以确定特定id的上一次记账状态:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rngChange As Range
    Dim rngIntersect As Range
    Dim xlCell As Range
    Dim scanId As String
    Dim inOutOld As String
    Dim inOut As String

    Set rngChange = Range("A:A")
    Set rngIntersect = Intersect(Target, rngChange)

    If Not rngIntersect Is Nothing Then
        Application.EnableEvents = False

            scanId = rngIntersect.Value

            Set xlCell = rngIntersect

            If rngIntersect.Row = 1 Then
                inOut = "OUT"
            Else
                Do Until xlCell.Row = 1
                    Set xlCell = xlCell.Offset(-1, 0)

                    If xlCell.Value = scanId Then
                        inOutOld = xlCell.Offset(0, 2).Value
                        Exit Do
                    End If

                Loop

            End If

            If inOutOld = "IN" Then
                inOut = "OUT"
            Else
                inOut = "IN"
            End If

            rngIntersect.Offset(0, 1).Value = Now
            rngIntersect.Offset(0, 2).Value = inOut
        Application.EnableEvents = True
    End If

End Sub

你修改的标题也没有任何意义。试着描述一下你所遇到的具体问题。不要详细描述应用程序的具体和直接的问题。不要使用
立即返回时间戳/日期的函数,而要使用
“任意文本”
。这样简单的事情不需要VBA。将下面的公式粘贴到C2单元格中,然后复制并粘贴到C2下面的所有“C”单元格中=如果(和((A2“”),(C1=“OUT”),“IN”,如果(和((A2“”),(C1=“IN”),“OUT”),“OUT”),”),如果用户在A5中输入他们的首字母缩写,因为另一个人来了并取出了另一个工具,这是否也会以同样的方式工作?另外,如果他们撤回了多个工具呢?如果我正确地想象你的工作表,它由许多工具组成,每个工具都是“输入”或“输出”。需要将上述两个“如果”公式作为一组复制到电子表格上的每个工具。我不确定你的工作表到底是什么样的,所以你可能需要编辑一下我的公式。如果可能的话,发布一张图片。简而言之,它只有三列信息被输入A列时间戳被输入B列和C列我希望一旦你将信息输入A列,C列将显示它何时出,何时入。文本不会被删除,只是添加到工作表中。我不会减去文本。我只是补充一下。@WhiteWolfman426我不确定我是否理解你的评论,请详细解释。我有时不太擅长解释自己。你看,我们想利用条形码扫描仪来检查工具的进出。员工扫描指示他们的条形码,然后扫描指示他们正在使用的工具的工具。然后当他们回来时,他们再次扫描条形码,然后将工具扫描回库存。当然,只要有这个简单的设置,就会导致一个混乱的问题:工具是进还是出,以及谁最后使用了工具,因为我们有一群员工不断地进进出出工具。这样我们就可以确定谁最后使用了什么工具,以及工具是进还是出。因此,如果当前值为“出”,那么单元格C应该设置为“入”,反之亦然?
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rngChange As Range
    Dim rngIntersect As Range
    Dim xlCell As Range
    Dim scanId As String
    Dim inOutOld As String
    Dim inOut As String

    Set rngChange = Range("A:A")
    Set rngIntersect = Intersect(Target, rngChange)

    If Not rngIntersect Is Nothing Then
        Application.EnableEvents = False

            scanId = rngIntersect.Value

            Set xlCell = rngIntersect

            If rngIntersect.Row = 1 Then
                inOut = "OUT"
            Else
                Do Until xlCell.Row = 1
                    Set xlCell = xlCell.Offset(-1, 0)

                    If xlCell.Value = scanId Then
                        inOutOld = xlCell.Offset(0, 2).Value
                        Exit Do
                    End If

                Loop

            End If

            If inOutOld = "IN" Then
                inOut = "OUT"
            Else
                inOut = "IN"
            End If

            rngIntersect.Offset(0, 1).Value = Now
            rngIntersect.Offset(0, 2).Value = inOut
        Application.EnableEvents = True
    End If

End Sub