2016-01-22 68 views
0

我正在向数据库添加信息。虽然这样做,我想检查数据库中是否已经存在该信息,所以我不会双写它。如果使用查找语句

Private Sub changebutton_dp_Click() 
Dim sheet As Worksheet 
Dim table_list_obj As ListObject 
Dim table_obj_row As ListRow 
Set sheet = Sheets("Database") 
Set table_list_obj = sheet.ListObjects(1) 
Set table_obj_row = table_list_obj.ListRows.Add 

For Each sheet In ActiveWorkbook.Worksheets("Database") 
    sheet.Cells.Find What:=DatabasePage.termaccepted_dp.Value,_ 
    LookIn:=xlValues, LookAt:=xlWhole 
    If sheet.Cells.Find.Range Is Nothing Then 
     DatabasePage.yesno_dp.Caption = No 
    ElseIf IsEmpty(sheet.Cells.Find.Range) Then 
     DatabasePage.yesno_dp.Caption = No 
    ElseIf sheet.Cells.Find.Range = "" Then 
     DatabasePage.yesno_dp.Caption = No 
    Else 
     DatabasePage.yesno_dp.Caption = Yes 
     DatabasePage.display_dp.Value = sheet.Cells.Find.Value 
    End If 
Next sheet 

table_obj_row.Range(1, 1).Value = DatabasePage.termdenied_dp.Value 

last_row = sheet.Range("A65536").End(xlUp).Row 
last_row = last_row 

sheet.Range("B" & last_row) = DatabasePage.termaccepted_dp.Value 

End Sub 

这给出了几个标志。

+0

请指定您得到标志的行;这对读者最有帮助。对于我看到的几个=否,应该很可能是=“否”,并且不允许使用sheet.Cells.Find.Range(请参阅.Find的文档;在VBA编辑器中按F1键) –

回答

0

至于我可以看到,唯一真正的问题是在你的For each worksheet循环中。你的代码有一些不正确的语法,你有多余的条件ElseIf

请参阅下面的代码。 注 - 我正在考虑DatabasePage的东西是正确的,因为我现在还不知道它到底是什么。

For Each sheet In ActiveWorkbook.Worksheets 'assuming you want to loop through all sheets 

    Dim rng As Range 

    Set rng = sheet.Cells.Find(What:=DatabasePage.termaccepted_dp.Value, _ 
     LookIn:=xlValues, LookAt:=xlWhole) 

    If rng Is Nothing Then 
     DatabasePage.yesno_dp.Caption = No 
    Else 
     DatabasePage.yesno_dp.Caption = Yes 
     DatabasePage.display_dp.Value = rng.Value 
    End If 

Next sheet 

该代码存储所述Find操作的值成一个范围对象,然后测试如果对象具有一个值,或为Null。

+0

谢谢你工作很棒! –

0

我不能对此进行测试,但可以通过在一个片材的片材不循环,需要将Find操作的结果存储在变量Range

Private Sub changebutton_dp_Click() 
    Dim sheet     As Worksheet 
    Dim table_list_obj  As ListObject 
    Dim table_obj_row   As ListRow 
    Dim rgFound    As Range 

    Set sheet = Sheets("Database") 

    Set table_list_obj = sheet.ListObjects(1) 
    Set table_obj_row = table_list_obj.ListRows.Add 

    Set rgFound = sheet.Cells.Find(What:=DatabasePage.termaccepted_dp.Value, _ 
            LookIn:=xlValues, LookAt:=xlWhole) 
    If rgFound Is Nothing Then 
     DatabasePage.yesno_dp.Caption = No 
    ElseIf Len(rgFound.Value) = 0 Then 
     DatabasePage.yesno_dp.Caption = No 
    Else 
     DatabasePage.yesno_dp.Caption = Yes 
     DatabasePage.display_dp.Value = rgFound.Value 
    End If 


    table_obj_row.Range(1, 1).Value = DatabasePage.termdenied_dp.Value 

    last_row = sheet.Range("A65536").End(xlUp).Row 

    sheet.Range("B" & last_row) = DatabasePage.termaccepted_dp.Value 

End Sub 
+0

谢谢!帮了很多。 –