2015-01-08 1 views
0

Microsoft Excel에서 코드를 작성하려고합니다. 다른 셀이있을 때 텍스트를 셀에 넣습니다. 예 : 셀 A가 채워지면 셀 C가 OUT으로 채워집니다. 그런 다음 셀 A가 다음 줄 또는 그 아래의 다른 줄에 다시 채워지면 셀 A와 동일한 줄에있는 셀 C가 IN으로 채워집니다.바코드 스캐너로 반복 입력 및 텍스트가 항상 추가되거나 삭제되지 않는 도구의 입력/출력 추적 코드 코딩

바코드 스캐너를 사용하여 도구를 체크인 및 체크 아웃하고 싶습니다. 나는 이미 바코드를 열 A로 스캔하는 방법을 알아 냈습니다.

이 과정을 반복하고 싶습니다.

도구가 꺼내 져 다시 재고가 될 때 추적 시트가 있어야합니다. 텍스트는 지속적으로 추가되고 삭제되지는 않습니다. 바코드 스캐너를 사용하여 도구를 체크인 및 체크 아웃하려고합니다. 직원들은 바코드를 스캔 한 다음 바코드를 스캔하여 도구를 스캔하고 어떤 도구를 사용하고 있는지 나타냅니다. 그런 다음 다시 돌아와서 바코드를 다시 스캔 한 다음 도구를 스캔하여 인벤토리로 되돌립니다. 물론이 간단한 설정만으로도 툴의 출입 여부에 대한 혼란을 야기 할 수 있습니다. 직원들이 계속해서 IN/OUT 도구를 사용하기 때문에 툴을 마지막으로 사용했습니다. 그런 식으로 우리는 누가 도구를 마지막으로 사용했는지, 그것이 IN인지 OUT인지를 확인할 수 있습니다.

아래에는 타임 스탬프에 필요한 코딩이 있습니다.

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 
+0

수정 된 제목 중 하나, 이해가되지 않습니다. 당신이 가진 * 구체적인 * 문제를 설명하려고 노력하십시오. 구체적이고 즉각적인 문제가 무엇인지 정확하게 설명하지 마라. –

+1

'Now' (타임 스탬프/날짜를 반환하는 함수) 대신''원하는 텍스트를 사용하십시오. –

+0

이 간단한 것을 VBA 할 필요가 없습니다. C2 셀에 아래 수식을 붙여 넣은 다음 C2 아래의 모든 "C"셀에 붙여 넣습니다. = (AND ((A2 <> ""), (C1 = "OUT")), "IN", IF (AND ((A2 <> "") OUT "," ")) – user3479671

답변

0

"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 

편집 : 응답에서

로를 묻는 사람의 의견, 다음 수정 된 코드 문제를 해결해야합니다 :

,451,515,
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에 대한 이전 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 
+0

텍스트를 빼는 것이 아닙니다. 나는 그것을 안으로 만 추가하고있다. – WhiteWolfman426

+0

@ WhiteWolfman426 나는 당신의 코멘트를 이해하는 경우에, 잘 설명하지 않는다 – silentsurfer

+0

아주 나 자신을 때때로 설명하는 것을 유감스럽게 생각하지 않는다. 바코드 스캐너를 사용하여 도구를 체크인 및 체크 아웃하려고합니다. 직원들은 바코드를 스캔 한 다음 바코드를 스캔하여 도구를 스캔하고 어떤 도구를 사용하고 있는지 나타냅니다. 그런 다음 다시 돌아와서 바코드를 다시 스캔 한 다음 도구를 스캔하여 인벤토리로 되돌립니다. 물론이 간단한 설정만으로도 툴을 넣거나 꺼내는 데 어려움을 겪을 수 있습니다. 우리는 끊임없이 툴을 안팎으로 가져 오는 직원이 많기 때문에 마지막으로 사용했습니다. – WhiteWolfman426

0

VBA를 사용하는 대신 워크 시트 'IF()'수식을 사용하여이 작업을 수행 할 수 있습니다.

=IF(A3="","","OUT") 
=IF(A4="","","IN") 

을 분해,이 셀 A3 = 아무 ("") 셀 C3에 (')을 전혀 넣지 "만약 셀 A3 무언가가 있다면, 그때"OUT "를 넣을 것을 의미한다.

첫 번째 수식을 C3 셀에 넣고 두 번째 수식을 C4에 놓습니다. 도구의 사용자가 셀 A3에 이니셜/이름을 입력하면 셀 C3에 OUT이라고 표시됩니다. 사용자가 다시 돌아와 도구를 반환하고 셀 C4에 IN/초 이름을 입력하면 C4가 IN이라고 표시됩니다.

희망이 VBA가 아닌 단순한 예제가 도움이됩니다.

+0

다른 직원이 와서 다른 도구를 철회 한 후 사용자가 A5에 이니셜을 입력하면 동일한 방식으로 작동합니까? 또한 여러 도구를 철회하면 어떻게 될까요? 각자 하나 하나에 모든 것이 나오겠습니까? – WhiteWolfman426

+0

워크 시트를 올바르게 상상할 수 있다면 많은 도구로 구성되어 있으며 각 도구는 'in'또는 'out'중 하나입니다. 위의 두 가지 '수식'수식은 스프레드 시트의 각 도구에 집합으로 복사해야합니다. 워크 시트가 정확히 어떻게 생겼는지 모르겠으므로 약간 수식을 편집해야 할 수도 있습니다. 가능한 경우 이미지를 게시하십시오. – CRUTER

+0

글쎄, 짧게 말하면 세 개의 열 정보가 열 A에 입력됩니다. 타임 스탬프가 열 B에 입력되고 열 CI에 정보를 입력하면 열 C는 정보가 언제 나오는지 표시합니다. 텍스트가 삭제되지 않고 시트에만 추가되었습니다. – WhiteWolfman426

관련 문제