2017-02-19 2 views
0

У меня есть таблица со следующей информацией "B" Emp. Название, позиция «C», «D», «E», в которой я хочу создать кнопку cmd find и другую кнопку cmd для обновления информации. поэтому я использовал следующие коды для поиска, и он работает очень хорошо, но корректировка обновлений неправильно работает, когда я ищу конкретную информацию, она отображает требуемую информацию, но при внесении изменений в форму и нажатии на обновление она меняет первую строку таблица не строка поиска. поэтому, пожалуйста, помогите.обновление Поиск информации

Private Sub Search_Click() 
Dim FindRow 
Dim cRow As String 
On Error Resume Next 
cRow = Me.txtSearch.Value 
'find the name of the employee written on the search box in column B 
Set FindRow = Sheets("Sheet1").Range("B:B").Find(what:=cRow, LookIn:=xlValues) 
'add the values to the userform 
Me.txtname.Value = FindRow 
Me.txtposition.Value = FindRow.Offset(0, 1) 
Me.txtlocation.Value = FindRow.Offset(0, 2) 
Me.txtbasicsalary.Value = FindRow.Offset(0, 3) 
End Sub 

Sub UpdateInfo_Click() 
Dim FindRow 
Dim fname As String 
Dim lname As String 
FindRow = 2 
fname = txtname.Text 
Cells(FindRow, 2).Value = fname 
lname = txtposition.Text 
Cells(FindRow, 3).Value = lname 
End Sub 

ответ

0

Во-первых, вам нужно Dim FindRow As Range вне субсчета кнопки, но на уровне User_Form модуля, поэтому все Sub s внутри user_form будет считывать и изменять ту же переменную.

Во-вторых, вам необходимо убедиться, что Find был успешно найден матч в «Sheet1», по If Not FindRow Is Nothing Then.

В-третьих, в вашем UpdateInfo_Click подлодки, убедитесь, что вы запускали Search_Click раньше, и что FindRow смог найти матч в колонке B, то вы можете изменять значения с помощью FindRow.Row.

Последнее, продолжайте использовать Sheets("Sheet1"), прежде чем ваш Cells, чтобы полностью квалифицироваться, как и вы в Set FindRow = Sheets("Sheet1").Range("B:B").Find(what:=cRow, LookIn:=xlValues).

Код

Option Explicit 

Dim FindRow As Range 

Private Sub Search_Click() 

Dim cRow As String 

On Error Resume Next 
cRow = Me.txtSearch.Value 
'find the name of the employee written on the search box in column B 
Set FindRow = Sheets("Sheet1").Range("B:B").Find(what:=cRow, LookIn:=xlValues) 

If Not FindRow Is Nothing Then '<-- successful find 
    'add the values to the userform 
    Me.txtname.Value = FindRow.Value 
    Me.txtposition.Value = FindRow.Offset(0, 1).Value 
    Me.txtlocation.Value = FindRow.Offset(0, 2).Value 
    Me.txtbasicsalary.Value = FindRow.Offset(0, 3).Value 
End If 

End Sub 

'====================================================================== 

Sub UpdateInfo_Click() 

Dim fname As String 
Dim lname As String 

fname = Me.txtname.Text 
lname = Me.txtposition.Text 

If Not FindRow Is Nothing Then '<-- check if there was a successful find in the "Search" sub 
    Sheets("Sheet1").Cells(FindRow.Row, 2).Value = fname 
    Sheets("Sheet1").Cells(FindRow.Row, 3).Value = lname 

    Set FindRow = Nothing '<-- clear after use 
End If 

End Sub 

Как пометить как "ответ", смотрите изображение ниже:

enter image description here

+0

Большое спасибо Шай, она работает очень хорошо сейчас, я высоко ценю Это. –

+0

@NabilAmer добро пожаловать, пожалуйста, отметьте как «ответ», нажав на ** V ** рядом с моим ответом (он должен стать зеленым) –

+0

привет Ши, пожалуйста, сообщите, что я просматриваю каждую часть этой страницы даже на закладке голосования, но ничего не нашел. может быть, проблема с этой страницей !? –

Смежные вопросы