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