2014-02-07 2 views
0

Я написал макрос Excel и, похоже, работает нормально. Он отображает поле ввода и один раз, когда я даю ему значение. Он сохраняет это значение в первой ячейке столбца C (C1). Однако во второй раз, когда я запускаю макрос, я хочу, чтобы он был записан в C2 и сохранял все данные в разных строках в столбце C, но каждый раз он записывает его в C1 и вызывает потерю данных.Как записать каждую запись ввода в строку 1 в Excel?

Sub DataInput() 

    Dim SearchTarget As String 
    Dim myRow As Long 
    Dim Rng As Range 


    Static PrevCell As Range 
    Dim FoundCell As Range 
    Dim CurCell As Range 
    Dim a As String 
    Dim Target As Range 

    'SearchTarget = "asdf" 
    SearchTarget = InputBox("Scan or type product barcode...", "New State Entry") 

    If PrevCell Is Nothing Then 
     myRow = Selection.Row 
     Set PrevCell = Range("C" & myRow) 
    End If 

    'Set Rng = Range("C:C,E:E") 'Columns for search defined here 
    Set Rng = Range("C:C,C:C") 'Columns for search defined here 

    With Rng 
     Set FoundCell = .Cells.Find(What:=SearchTarget, _ 
     After:=PrevCell, LookIn:=xlFormulas, LookAt:= _ 
     xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=True) 
    End With 

    If FoundCell Is Nothing Then 

     MsgBox SearchTarget & " was not found." 
     Range("C1").Value = InputBox("code?") 
     Range("D1").Value = Now() 

    Else 

     FoundCell.Activate 
     '  If PrevCell.Address = FoundCell.Address Then 
     '   MsgBox "there's only one!" 
     '  End If 

     ActiveCell.Offset(0, 1).Select 
     timestamp = Format(Now(), "dd-mmm-yy hh:mm") 
     ActiveCell = timestamp 
     ActiveCell = Now() 

     ActiveCell.Offset(0, 2).Select 
     ActiveCell = "T141000" 

     ActiveCell.Offset(0, 1).Select 

     Set PrevCell = FoundCell 

    End If 

End Sub 
+0

изменения 'Range ("C1") Значение = InputBox ("код?")' В 'Range ("C" & Range ("C" и Rows.Count) .END (xlUp) .Row + 1) = InputBox («Код?») 'и посмотреть, помогает ли это –

+0

Да, я попробовал, и он отлично работает! Большое спасибо за вашу помощь – user3127229

ответ

0

Проблема здесь заключается в вашей инструкции if - вы всегда сохраняете введенные коды в ячейках C1 и дате в D1. Вам нужно динамически выработать следующий номер доступной строки и использовать это вместо этого. Попробуйте что-то вроде этого:.

Public Sub DataInput() 

    ... 

    If FoundCell Is Nothing Then 

     MsgBox SearchTarget & " was not found." 

     Dim nextFreeRow As Integer 
     nextFreeRow = Range("C" & Rows.Count).End(xlUp).Row + 1 

     Range("C" & nextFreeRow).Value = InputBox("code?") 
     Range("D" & nextFreeRow).Value = Now() 

    Else 
     ... 
    End If 

    ... 

End Sub 
+0

Спасибо большое! Я застрял в этой проблеме, и вы ее исправили! еще раз спасибо. – user3127229