2014-02-14 6 views
1

Привет У меня есть следующий код:как исправить ошибку ошибки несоответствия?

Private Sub Search_Click() 
Dim Name As String 
Dim f As Range 
Dim r As Long 
Dim ws As Worksheet 
Dim s As Integer 
Dim FirstAddress As String 
Dim str() As String 

Name = surname.Value 

With ws 
Set f = Range("A:A").Find(what:=Name, LookIn:=xlValues) 
If Not f Is Nothing Then 
With Me 
    firstname.Value = f.Offset(0, 1).Value 
    tod.Value = f.Offset(0, 2).Value 
    program.Value = f.Offset(0, 3).Value 
    email.Value = f.Offset(0, 4).Text 

    SetCheckBoxes f.Offset(0, 5) '<<< replaces code below 

    officenumber.Value = f.Offset(0, 6).Text 
    cellnumber.Value = f.Offset(0, 7).Text 
    r = f.Row '<<<<<<<<< using this to locate the row of "found" 
End With 
    findnext 
     FirstAddress = f.Address 
Do 
    s = s + 1 
    Set f = Range("A:A").findnext(f) 
      Loop While Not f Is Nothing And f.Address <> FirstAddress 
    If s > 1 Then 
     Select Case MsgBox("There are " & s & " instances of " & Name, vbOKCancel Or vbExclamation Or vbDefaultButton1, "Multiple entries") 

     Case vbOK 
      findnext 
     Case vbCancel 

     End Select 

    End If 

Else: MsgBox Name & "Not Listed" 

End If 

End With 

End Sub 

и я хочу использовать кнопку обновления:

private Sub update_Click() 

Dim Name As String 
Dim f As Range 
Dim ws As Worksheet 

With ws 
Set f = .Cells(r, 1) '<<<<<<<<<<<<< Mismatch type error 

    f.Value = surname.Value 
    f.Offset(0, 1).Value = firstname.Value 
    f.Offset(0, 2).Value = tod.Value 
    f.Offset(0, 3).Value = program.Value 
    f.Offset(0, 4).Value = email.Value 
    f.Offset(0, 5).Value = GetCheckBoxes 
    f.Offset(0, 6).Value = officenumber.Value 
    f.Offset(0, 7).Value = cellnumber.Value 

End With 
End Sub 

, поэтому я хочу, чтобы найти строку найденной ячейки и заменить все клетки независимо записывается в текстовое поле (обновление предыдущей информации с новой информацией) - однако я получаю сообщение об ошибке при установке f = .cells (r, 1), как я могу это исправить?

+1

'r' не объявлен в вашем 2-м подпункте. Вам нужно объявить его глобально, если вы хотите установить его в одном суб и использовать его в другом. – parakmiakos

ответ

3

Попробуйте использовать глобальную переменную r: вместо объявляющий Dim r As Long в Private Sub Search_Click(), используйте Public r As Longвне все функции в самом верху модуля:

Public r As Long 

Public Sub Search_Click() 
'your code 
End Sub 

Public Sub update_Click() 
'your code 
End Sub 

Теперь, после вызова Search_Clickr будет inizialized, а затем вы может позвонить update_Click.

P.S. Не забудьте удалить Dim r As Long из Private Sub Search_Click().

BTW, в ваших update_Click и Search_Click подстанциях, которые вы не инициализировали ws переменная: Set ws = ThisWorkbook.Worksheets("Sheet1"). После добавления этого изменения строки Range("A:A") в .Range("A:A") в Search_Click

+0

Я вставил public r на самом верху, удалил dim r из search_click, и я изменил подтипы на публичные, но теперь он превращает меня .cells (r, 1) = Doolie1106

+1

Это связано с тем, что в ваших подписях 'update_Click' и' Search_Click' вы не инициализировали переменную 'ws': используйте что-то вроде этого:' Установите ws = ThisWorkbook.Worksheets ("Sheet1") ' –

+1

Кстати, после добавления' Set ws = ThisWorkbook.Worksheets ("Sheet1") ', измените' Range ("A: A") 'на' .Range ("A: A") 'в' Search_Click' –

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