VBA 使用复选框和文本框编辑用户表单列表框(基于 excel 数据库)
VBA Edit Userform Listbox (based on excel database) using Checkboxes and Textboxes
我有一个数据库(5 列和行是自适应的)。此数据排序为:姓名、出生日期和晋升年份。
我还制作了一个基于列表框的用户表单,可以显示这 4 条信息。
现在我想使用用户窗体中的复选框和文本框来编辑此数据库。
我已经制作了我的用户表单,但问题仍然存在,将用户表单的数据(复选框:true 或 false 和文本框)传输到相应单元格(合适的人)的数据库中。
知道我应该如何思考或解决这个问题吗?我已经尝试了一些东西,但我无法提供可以传输复选框和文本框信息的解决方案。
你好
Userform Layout
假设第 5 列为 A(状态)
|状态|姓名|姓氏|出生日期|年份|
Checkbx1 数据进入 A(状态)
Textbx1 数据转到 B(姓名)
Textbx2 数据转到 C(姓氏)
Textbx3 数据转到 D(DOB)
Textbx4 数据转到 E(年)
"You may assign this code to a command button"
'数据传输
如果 Form1.checkbox1=TRUE 那么
Shee1.Range("a:a").End(xlDown).Offset(1).Select
Activecell.value="True"
其他
Activecell.value="False"
如果
结束
'将姓名转给B
ActiveCell.Offset(0, 1).Value = StrConv(TextBox1, vbProperCase)
'将姓氏转为C
ActiveCell.Offset(0, 2).Value = StrConv(TextBox2, vbProperCase)
'将DOB转给D
ActiveCell.Offset(0, 3).Value = StrConv(TextBox3, vbProperCase)
'将年份转为E
ActiveCell.Offset(0, 4).Value = StrConv(TextBox4, vbProperCase)
您可以使用此代码填充列表
Private Sub UserForm_Initialize()
Sheets("Sheet1").Range(Sheets("Sheet1").UsedRange.Address).Name = "MyList"
ListBox1.ColumnCount = Range("MyList").Columns.Count
ListBox1.RowSource = "MyList"
End Sub
然后使用下面的代码查找并 Select Sheet
中的数据行
If ListBox1.ListIndex < 0 Then
MsgBox " Select a row first !"
Exit Sub
Else
Cells.Find(What:=ListBox1.List(ListBox1.ListIndex), After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=True, SearchFormat:=False).Activate
Cells.FindNext(After:=ActiveCell).Activate
然后使用 Offset 将数据从 UserForm 传输到 Sheet
ActiveCell.Offset(0, 4).Value = UserForm1.TextBox1.Text
ActiveCell.Offset(0, 5).Value = UserForm1.Checkbox1.value
ActiveCell.Offset(0, 6).Value = UserForm1.optionbutton1.value
我有一个数据库(5 列和行是自适应的)。此数据排序为:姓名、出生日期和晋升年份。 我还制作了一个基于列表框的用户表单,可以显示这 4 条信息。
现在我想使用用户窗体中的复选框和文本框来编辑此数据库。 我已经制作了我的用户表单,但问题仍然存在,将用户表单的数据(复选框:true 或 false 和文本框)传输到相应单元格(合适的人)的数据库中。
知道我应该如何思考或解决这个问题吗?我已经尝试了一些东西,但我无法提供可以传输复选框和文本框信息的解决方案。
你好 Userform Layout
假设第 5 列为 A(状态)
|状态|姓名|姓氏|出生日期|年份|
Checkbx1 数据进入 A(状态)
Textbx1 数据转到 B(姓名)
Textbx2 数据转到 C(姓氏)
Textbx3 数据转到 D(DOB)
Textbx4 数据转到 E(年)
"You may assign this code to a command button"
'数据传输
如果 Form1.checkbox1=TRUE 那么
Shee1.Range("a:a").End(xlDown).Offset(1).Select
Activecell.value="True"
其他
Activecell.value="False"
如果
结束'将姓名转给B
ActiveCell.Offset(0, 1).Value = StrConv(TextBox1, vbProperCase)
'将姓氏转为C
ActiveCell.Offset(0, 2).Value = StrConv(TextBox2, vbProperCase)
'将DOB转给D
ActiveCell.Offset(0, 3).Value = StrConv(TextBox3, vbProperCase)
'将年份转为E
ActiveCell.Offset(0, 4).Value = StrConv(TextBox4, vbProperCase)
您可以使用此代码填充列表
Private Sub UserForm_Initialize()
Sheets("Sheet1").Range(Sheets("Sheet1").UsedRange.Address).Name = "MyList"
ListBox1.ColumnCount = Range("MyList").Columns.Count
ListBox1.RowSource = "MyList"
End Sub
然后使用下面的代码查找并 Select Sheet
中的数据行If ListBox1.ListIndex < 0 Then
MsgBox " Select a row first !"
Exit Sub
Else
Cells.Find(What:=ListBox1.List(ListBox1.ListIndex), After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=True, SearchFormat:=False).Activate
Cells.FindNext(After:=ActiveCell).Activate
然后使用 Offset 将数据从 UserForm 传输到 Sheet
ActiveCell.Offset(0, 4).Value = UserForm1.TextBox1.Text
ActiveCell.Offset(0, 5).Value = UserForm1.Checkbox1.value
ActiveCell.Offset(0, 6).Value = UserForm1.optionbutton1.value