两个Excel VBA用户表单可以具有相同的值吗?

时间:2016-04-17 18:24:14

标签: excel vba excel-vba

我正在处理Userform的数据,但是保存或新功能存在问题。例如,有两个用户表单,Useform1用于可编辑数据,Usernew用于向excel表添加新数据,它们都从同一窗口打开,但Usernew依赖于Userform1。但是,如果用户打开Userform1然后用户new,则数据将从其他excel数据合并。示例Userform1打开整个行数据,在这种情况下名称:Katie,pass:chuang等。另一方面,Usernew应该打开与之前相同的数据,但是打开一个随机的整行数据。

以下是代码:

-H

2 个答案:

答案 0 :(得分:0)

为什么不使用相同的表单,但添加新数据和编辑数据。如果单击Add new,它将转到工作表的最后一行并更新。

如果单击“编辑”,您将拥有一个现在启用的搜索框,并根据数据的唯一键来填充字段并进行编辑。

例如,他们搜索特定的滚动号#,并且行数据现在被输入到表单中。

答案 1 :(得分: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列。)