我试图在Microsoft中生成一个代码,当另一个单元格被填充时,它会将文本放入一个单元格中。
我要找的是,例如,当单元格A被填充时,单元格C被填充,没有OUT。然后,当单元格A被再次填充在下一行或它下面的另一行时,单元格C位于同一行上,而单元格A被填充为IN。
我们希望利用条形码扫描仪来检查工具的进出。我已经想好了如何把条形码扫描到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发布于 2015-01-08 18:10:36
这听起来像是一个非常人为的例子,用来问“在VBA中,如何用特定的字符串填充Excel单元格?”
这个问题的答案是:
myRange.Value = "<myString>"总之,这就是我要解决你的问题的方法:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngChange As Range
Dim rngIntersect As Range
Dim xlCell 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
For Each xlCell In rngIntersect
If xlCell.Value = "" Then
inOut = "OUT"
Else
inOut = "IN"
End If
xlCell.Offset(0, 1).Value = Now
xlCell.Offset(0, 2).Value = inOut
Next xlCell
Application.EnableEvents = True
End If
End Sub编辑:
为了回应提问者的评论,以下修改的代码应该解决这个问题:
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 SubEdit2:
使用此方法可在日志中反向循环以确定特定id的以前bookiung状态:
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发布于 2015-01-08 18:09:56
您可以使用工作表“IF()”公式来代替使用VBA。
=IF(A3="","","OUT")
=IF(A4="","","IN")要将其分解,这意味着如果单元格A3 = nothing (""),那么在单元格C3中不放任何东西,但是如果单元格A3中有什么东西,那么就放"OUT“。
将第一个公式放在单元格C3中,第二个公式放在C4中。如果工具的用户在单元格A3中输入他们的首字母/名称,那么单元格C3就会说出。直到用户返回该工具并在单元格A4中输入他们的首字母/名称时,单元格C4才会说IN。
希望这个简单的,非VBA的例子有帮助!
https://stackoverflow.com/questions/27846508
复制相似问题