EXCEL VBA 窗体设计,如何实现查询前一条记录和后一条记录的功能。
在用EXCEL做一个工资管理系统,界面上按下“查询按钮”后查找后台数据表中与组合框“结算期间”和文本框“证件号码”相符的记录,把查找到的记录赋值给标签控件的caption...
在用EXCEL做一个工资管理系统,界面上按下“查询按钮”后查找后台数据表中与组合框“结算期间”和文本框“证件号码”相符的记录,把查找到的记录赋值给标签控件的caption属性显示,同时根据查找到的数据所在行号,逐条浏览本期间(年,月)内所有的记录。
现在的问题是,我已经实现了查询功能,但没有办法实现“上一条”和一“条”的查找功能。
下面是我写的“查询”按钮的代码:
Private Sub cmdcx_Click() '按期间和证件号查询
Dim qj As String '取期间的年号和月号
qjh = Sheet2.UsedRange.Rows.Count '取记录总行号
If Len(cmbqj.Value) = 7 Then '期间的格式是“2012年1月”7个字符和“2013年10月”8个字符两种qjn = Val(Left(cmbqj.Value, 4))
qjy = Val(Mid(cmbqj.Value, 6, 1))
Else
qjn = Val(Left(cmbqj.Value, 4))
qjy = Val(Mid(cmbqj.Value, 6, 2))
End If
For qji = 2 To qjh '期间查询从第2行起到最后一行
If Val(Sheet2.Cells(qji, 3).Value) = qjn Then '如果年号相同查月 If Val(Sheet2.Cells(qji, 4).Value) = qjy Then '如果月号相同查证件
If Sheet2.Cells(qji, 8).Text = txtzjc.Text Then '如果证件相同
txtjsdhc.Enabled = True '激活结算单号文本框
txtjsdhc.Value = Cells(qji, 2).Value '将结算单号赋值给结算单号文本框
lblgze.Caption = Cells(qji, 10).Value '将基础工资额赋值给标签
lblgjb.Caption = Cells(qji, 11).Value
lbljjb.Caption = Cells(qji, 12).Value
lbldnb.Caption = Cells(qji, 13).Value
lblyjj.Caption = Cells(qji, 14).Value
lblbwy.Caption = Cells(qji, 15).Value
lblxj.Caption = Cells(qji, 16).Value
txtxmc.Enabled = True '激活姓名文本框
txtxmc.Value = Cells(qji, 7).Value '将姓名列值赋给姓名框
cmdpre.Enabled = True '激活前后浏览按钮
End If
End If
End If
Next
End Sub
请“知友”们给段程序能实现浏览前后条记录的功能。我的代码如果不合适,请指正。 展开
现在的问题是,我已经实现了查询功能,但没有办法实现“上一条”和一“条”的查找功能。
下面是我写的“查询”按钮的代码:
Private Sub cmdcx_Click() '按期间和证件号查询
Dim qj As String '取期间的年号和月号
qjh = Sheet2.UsedRange.Rows.Count '取记录总行号
If Len(cmbqj.Value) = 7 Then '期间的格式是“2012年1月”7个字符和“2013年10月”8个字符两种qjn = Val(Left(cmbqj.Value, 4))
qjy = Val(Mid(cmbqj.Value, 6, 1))
Else
qjn = Val(Left(cmbqj.Value, 4))
qjy = Val(Mid(cmbqj.Value, 6, 2))
End If
For qji = 2 To qjh '期间查询从第2行起到最后一行
If Val(Sheet2.Cells(qji, 3).Value) = qjn Then '如果年号相同查月 If Val(Sheet2.Cells(qji, 4).Value) = qjy Then '如果月号相同查证件
If Sheet2.Cells(qji, 8).Text = txtzjc.Text Then '如果证件相同
txtjsdhc.Enabled = True '激活结算单号文本框
txtjsdhc.Value = Cells(qji, 2).Value '将结算单号赋值给结算单号文本框
lblgze.Caption = Cells(qji, 10).Value '将基础工资额赋值给标签
lblgjb.Caption = Cells(qji, 11).Value
lbljjb.Caption = Cells(qji, 12).Value
lbldnb.Caption = Cells(qji, 13).Value
lblyjj.Caption = Cells(qji, 14).Value
lblbwy.Caption = Cells(qji, 15).Value
lblxj.Caption = Cells(qji, 16).Value
txtxmc.Enabled = True '激活姓名文本框
txtxmc.Value = Cells(qji, 7).Value '将姓名列值赋给姓名框
cmdpre.Enabled = True '激活前后浏览按钮
End If
End If
End If
Next
End Sub
请“知友”们给段程序能实现浏览前后条记录的功能。我的代码如果不合适,请指正。 展开
2个回答
展开全部
思路:将点击查询按钮后,进行查询,将查询到的结果所在的行号保存到数组中,
点击上 下 按钮时候改变数组下标即可。
Dim R As Long
Dim Arr()
Private Sub CommandButton1_Click() '查询按钮
ReDim Arr(0)
For qji = 2 To qjh '期间查询从第2行起到最后一行
If Val(Sheet2.Cells(qji, 3).Value) = qjn Then '如果年号相同查月
If Val(Sheet2.Cells(qji, 4).Value) = qjy Then '如果月号相同查证件
If Sheet2.Cells(qji, 8).Text = txtzjc.Text Then '如果证件相同
Arr(UBound(Arr)) = qji '将查询到的行保存到数组
ReDim Preserve Arr(UBound(Arr) + 1)
End If
End If
End If
Next
If UBound(Arr) > 0 Then
显示 (R) '查询完成后显示第一条
Else
MsgBox "没有结果"
End If
End Sub
Private Sub CommandButton2_Click() '下一条 按钮
R = R + 1
If R > UBound(Arr) - 1 Then
MsgBox "已经是最后一条"
R = R - 1
Else
显示 (R)
End If
End Sub
Private Sub CommandButton3_Click() '上一条 按钮
R = R - 1
If R < 0 Then
MsgBox "已经是第一条"
R = R + 1
Else
显示 (R)
End If
End Sub
Function 显示(N As Long) '显示函数
R0 = Arr(N) '要显示的行
txtjsdhc.Enabled = True '激活结算单号文本框
txtjsdhc.Value = Cells(RO, 2).Value '将结算单号赋值给结算单号文本框
lblgze.Caption = Cells(RO, 10).Value '将基础工资额赋值给标签
lblgjb.Caption = Cells(RO, 11).Value
lbljjb.Caption = Cells(RO, 12).Value
lbldnb.Caption = Cells(RO, 13).Value
lblyjj.Caption = Cells(RO, 14).Value
lblbwy.Caption = Cells(RO, 15).Value
lblxj.Caption = Cells(RO, 16).Value
txtxmc.Enabled = True '激活姓名文本框
txtxmc.Value = Cells(RO, 7).Value '将姓名列值赋给姓名框
cmdpre.Enabled = True '激活前后浏览按钮
End Function
点击上 下 按钮时候改变数组下标即可。
Dim R As Long
Dim Arr()
Private Sub CommandButton1_Click() '查询按钮
ReDim Arr(0)
For qji = 2 To qjh '期间查询从第2行起到最后一行
If Val(Sheet2.Cells(qji, 3).Value) = qjn Then '如果年号相同查月
If Val(Sheet2.Cells(qji, 4).Value) = qjy Then '如果月号相同查证件
If Sheet2.Cells(qji, 8).Text = txtzjc.Text Then '如果证件相同
Arr(UBound(Arr)) = qji '将查询到的行保存到数组
ReDim Preserve Arr(UBound(Arr) + 1)
End If
End If
End If
Next
If UBound(Arr) > 0 Then
显示 (R) '查询完成后显示第一条
Else
MsgBox "没有结果"
End If
End Sub
Private Sub CommandButton2_Click() '下一条 按钮
R = R + 1
If R > UBound(Arr) - 1 Then
MsgBox "已经是最后一条"
R = R - 1
Else
显示 (R)
End If
End Sub
Private Sub CommandButton3_Click() '上一条 按钮
R = R - 1
If R < 0 Then
MsgBox "已经是第一条"
R = R + 1
Else
显示 (R)
End If
End Sub
Function 显示(N As Long) '显示函数
R0 = Arr(N) '要显示的行
txtjsdhc.Enabled = True '激活结算单号文本框
txtjsdhc.Value = Cells(RO, 2).Value '将结算单号赋值给结算单号文本框
lblgze.Caption = Cells(RO, 10).Value '将基础工资额赋值给标签
lblgjb.Caption = Cells(RO, 11).Value
lbljjb.Caption = Cells(RO, 12).Value
lbldnb.Caption = Cells(RO, 13).Value
lblyjj.Caption = Cells(RO, 14).Value
lblbwy.Caption = Cells(RO, 15).Value
lblxj.Caption = Cells(RO, 16).Value
txtxmc.Enabled = True '激活姓名文本框
txtxmc.Value = Cells(RO, 7).Value '将姓名列值赋给姓名框
cmdpre.Enabled = True '激活前后浏览按钮
End Function
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询