2014-02-14 60 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'沒有在您的第二個子項中聲明。如果要將其設置爲一個子項並在另一個子項中使用,則需要在全局範圍內聲明它。 – parakmiakos

回答

3

嘗試使用全局變量r:代替聲明中Private Sub Search_Click()Dim r As Long,在模塊的最頂部使用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.不要忘記從Private Sub Search_Click()刪除Dim r As Long

順便說一句,在你的update_ClickSearch_Click下你還沒有初始化ws變量:Set ws = ThisWorkbook.Worksheets("Sheet1")。在將此行更改爲Range("A:A").Range("A:A")之後Search_Click

+0

我在頂部插入了public r,從search_click中刪除了dim r,並且我已將subs轉換爲public,但現在它爲我提供了一個.cells(r,1)= Doolie1106

+1

這是因爲在你的'update_Click'和'Search_Click'子文件中你還沒有初始化'ws'變量:使用類似下面的代碼:'Set ws = ThisWorkbook.Worksheets(「Sheet1」)' –

+1

btw,在「Search_Click」中將ThisWorkbook.Worksheets(「Sheet1」)','Range(「A:A」)'改爲'.Range(「A:A」)''' –

相關問題