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

请“知友”们给段程序能实现浏览前后条记录的功能。我的代码如果不合适,请指正。
展开
 我来答
crazy0qwer
2013-03-18 · TA获得超过3299个赞
知道大有可为答主
回答量:4020
采纳率:71%
帮助的人:1310万
展开全部
思路:将点击查询按钮后,进行查询,将查询到的结果所在的行号保存到数组中,
点击上 下 按钮时候改变数组下标即可。
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
TAT萝卜
2013-03-18 · TA获得超过4972个赞
知道大有可为答主
回答量:3084
采纳率:66%
帮助的人:1108万
展开全部
建议使用ADO连接查询SHEET2,可以方便地对记录集(查询结果)进行上移、下移操作
追问
这个真不会。。。。能不能再给详细说下。
追答
留邮箱,发个文件给你
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式