2016-01-22 63 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

謝謝!幫了很多。 –