2016-04-17 71 views
0

我正在處理用戶窗體的數據,但存在保存或新功能的問題。例如,有兩種用戶窗體,Useform1用於可編輯數據,而Usernew用於向Excel表添加新數據,它們都從同一窗口打開,但Usernew依賴於Userform1。但是,如果用戶打開Userform1,則用戶新數據將從其他Excel數據合併。示例Userform1打開整個行數據,在這種情況下名稱爲:Katie,pass:chuang等。另一方面,Usernew應打開與以前相同的數據,但打開一個隨機的整行數據。兩個Excel VBA用戶表單可以具有相同的值嗎?

下面是代碼:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Not Intersect(Target, Range("a2:Z10000")) Is Nothing Then 
    If Target.Address = Target.EntireRow.Address Then 

     UserForm1.cmbEmp = Cells(Target.Row, 1) 
     UserForm1.ldlcolor = Cells(Target.Row, 3) 
     UserForm1.ldlname = Cells(Target.Row, 1) 
     UserForm1.ldlpresI = Cells(Target.Row, 14) 
     UserForm1.ldlpopular = Cells(Target.Row, 30) 
     UserForm1.miRow = Target.Row 
     UserForm1.ComboBox_1 = Cells(Target.Row, 38) 
     UserForm1.ldlres1 = Cells(Target.Row, 39) 
     UserForm1.ComboBox_2 = Cells(Target.Row, 40) 
     UserForm1.ldlres2 = Cells(Target.Row, 41) 
     UserForm1.ComboBox_3 = Cells(Target.Row, 42) 
     UserForm1.ldlres3 = Cells(Target.Row, 43) 
     UserForm1.ldlpass = Cells(Target.Row, 45) 
     UserForm1.lblusername = Cells(Target.Row, 44) 
     UserForm1.ldlplaz = Cells(Target.Row, 8) 
     UserForm1.Show 

    End If 

    Usernew.cmbEmp = Cells(Target.Row, 1) 
    Usernew.ldlcolor = Cells(Target.Row, 3) 
    Usernew.ldlname = Cells(Target.Row, 1) 
    Usernew.ldlpresI = Cells(Target.Row, 14) 
    Usernew.ldlpopular = Cells(Target.Row, 30) 
    Usernew.miRow = Target.Row 
    Usernew.ComboBox_1 = Cells(Target.Row, 38) 
    Usernew.ldlres1 = Cells(Target.Row, 39) 
    Usernew.ComboBox_2 = Cells(Target.Row, 40) 
    Usernew.ldlres2 = Cells(Target.Row, 41) 
    Usernew.ComboBox_3 = Cells(Target.Row, 42) 
    Usernew.ldlres3 = Cells(Target.Row, 43) 
    Usernew.ldlpass = Cells(Target.Row, 45) 
    Usernew.lblusername = Cells(Target.Row, 44) 
    Usernew.ldlplaz = Cells(Target.Row, 8) 

End If 

End Sub 
+0

我真的沒有看到您想要執行的操作。請解釋UserForm1和UserNew的用途。 UserNew是一種輸入新用戶數據的表單嗎? – INOPIAE

+0

這兩種表格都是用於輸入數據的,但其中一個用於輸入新數據,另一個用於編輯數據。 –

+0

因此,如果我改變現有數據UserForm1被打開並在另一種情況下用該行中的數據填充Usernew被打開並且填充空行中的空數據? – INOPIAE

回答

0

如果要將表單中的數據寫回到工作表,那麼您必須這樣做。以下是一個示例:

Private Sub UserForm_Terminate() 

Dim lngLastRow As Long 

With Worksheets(1) 
    lngLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
    'create a new row below all existing rows (append) 
    lngLastRow = lngLastRow + 1 
    'write back the data to the sheet 
    Cells(lngLastRow, 1) = Usernew.cmbEmp 
    Cells(lngLastRow, 3) = Usernew.ldlcolor 
    Cells(lngLastRow, 1) = Usernew.ldlname 
    '... 
    'complete code with the other cells and form controls 
End With 

End Sub 

注意:您必須將上面的代碼添加到您的表單才能使其工作。

不過,還有一個問題需要回答。如何判斷Excel工作表中的某一行是否包含現有用戶或者是否爲空記錄?目前,您的代碼表明,此工作表中從第2行到第10000行的所有行都包含現有用戶。但是當你添加一個新用戶時,這不再有效。

因此,我建議你改變當前的事件,像這樣:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

On Error GoTo AddNewUser 
If Range(Cells(Target.Row, 1), Cells(Target.Row, 45)).SpecialCells(xlCellTypeConstants).Count > 0 Then 
    On Error GoTo 0 
    'Existing user 
End If 
Exit Sub 

AddNewUser: 
    'New User 
Exit Sub 

End Sub 

如果任何行中單元格的包含數據,然後它是一個現有的用戶。如果該行中的所有單元都是空的,那麼這是一個新用戶。 (對於「任何」,我指的是您在當前VBA代碼中引用的單元格,這似乎包括第1列到第45列。)

+0

我找到了解決方案,但是我會標記你的答案,因爲你的工作非常努力。我只是移動UserForm1.Show之前的所有Usernew代碼。 –

0

爲什麼不使用相同的形式,但必須添加新的和編輯數據。如果點擊添加新,它將轉到表單中的最後一行並進行更新。

如果點擊編輯,您將擁有一個現在已啓用的搜索框,並基於數據的唯一鍵填充字段並且用戶可以編輯。

例如,他們搜索特定的卷號#並將該行數據輸入到表單中。

相關問題