2016-02-10 6 views
-1
кнопка

обновления не работает должным образом, она просто суммирование новой строки с данными вместо обновленияUpdate не работает Excel VBA

Dim currentrow As Long 

     Private Sub cmdFindNext_Click() 
     Dim lastrow 
     Dim evtname As String 
     lastrow = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row 
     evtname = TB1.Text 
     For currentrow = 4 To lastrow 
     If Cells(currentrow, 1).Text = evtname Then 
     TB1.Text = Cells(currentrow, 1).Text 
     ComboB.Text = Cells(currentrow, 4) 
     startdate.Text = Cells(currentrow, 2) 
     enddate.Text = Cells(currentrow, 3) 
     End If 
     Next currentrow 
     TB1.SetFocus 
     End Sub 

     Private Sub cmdFindPrevious_Click() 
     Dim lastrow 
     Dim evtname As String 
     lastrow = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row 
     evtname = TB1.Text 
     For currentrow = lastrow To 4 Step -1 
     If Cells(currentrow, 1).Text = evtname Then 
     TB1.Text = Cells(currentrow, 1).Text 
     ComboB.Text = Cells(currentrow, 4) 
     startdate.Text = Cells(currentrow, 2) 
     enddate.Text = Cells(currentrow, 3) 
     End If 
     Next currentrow 
     TB1.SetFocus 
     End Sub 

     Private Sub cmdUpdate_Click() 
     Cells(currentrow - 1, 1).Resize(1, 4).Value = Array(TB1.Text,  startdate.Text, enddate.Text, ComboB.Text) 

     End Sub 

update

Что я могу сделать об этом обновлении я добавил текстовые поля в сделать это просто, что контроль даты, но до сих пор его же

+1

Вы пытались изменить 'currentrow' на' currentrow - 1'? –

+0

@MacroMan вы правы, он работает –

ответ

0

Попробуйте вместо этого - нет необходимости назначить переменные для охвата этого подпункта, и вы можете делать все это с одной строки кода:

Private Sub cmdUpdate_Click() 
    Cells(currentrow - 1, 1).Resize(1, 4).Value = Array(TB1.Text, startdate.Text, enddate.Text, ComboB.Text) 
End Sub 

Чтобы получить правильную строку, а не последний ряд:

Вам необходимо выйти из цикла, когда условие найдено, так что currentrow сохраняет правильное значение. В обоих ваших найти субмарин, выйти из цикла в конце вашего If блока:

'// existing code here 
Exit For '<~~ add this in both subs. 
End If 

После того, как вы сделали это, изменить currentrow - 1 обратно currentrow, чтобы убедиться, что это правый ряд.

+0

полезно, но это только обновление LAST ROW, как я могу настроить его для поиска данных и обновления в любой строке –

+1

, t знать, где 'currentrow' получает свое значение, поэтому нам не хватает информации, чтобы помочь –

+0

извините за это, в редактировании было удалено« Dim currentrow As Long » –

1

Попробуйте суб

Private Sub cmdUpdate_Click() 
    Dim evtname As String, sname As String, sdate As String, edate As String 
    evtname = TB1.Text 
     Cells(currentrow - 1, 1).Value = evtname 
    sname = ComboB.Text 
    Cells(currentrow - 1, 4).Value = sname 
    sdate = startdate.Text 
     Cells(currentrow - 1, 2).Value = sdate 
    edate = enddate.Text 
    Cells(currentrow - 1, 3).Value = edate 
End Sub 
+0

работает, но обновление только последней строки –