
1、打开源数据文件,把首行中的对应的数据,复制行到空白位置。
2、选中J2单元格,单击编辑栏中的"插入函数“,如图示。
3、d出”插入函数“对话框,设置其类别为”逻辑“,并选择列表框中的IF选项。然后确定。
4、在d出的”函数参数“对话框中,设置Logical_test参数为”I2=“”,将Value_if_true设置为“”,即空白内容。
将Value_if_false参数框中输入“VLOOKUP(I2,A2:B2846,2),然后确定。
5、选中J2单元格,注意是J2,不是I2哦.(I2是输入证券代码的地方),鼠标移动到单元格右下角,出现十字光标时,按住鼠标左键向右拖动到O2单元格。如图
6、这个时候会发现原来源数据中的C2-G2单元格中的内容就会自动填充到K2-O2单元格中。这个时候,如需要的数据是按源数据中的数据从上 到下排列的,就可以不用修改了。直接重复第5步中的方法,把J2-O2每个单元格下拉填充就完成了。如图示,先把需要的数据列复制到I列中,然后依次下拉 填充。
7、但有时候,需要的不是按照源数据中的排序,比如说,现用的这个例子,如果在I3中,输入000002就会出错。如图示。
8,这是j3中的函数为VLOOKUP(I3,A3:B2847,2)),也就是搜索从A3到B2487区域中 的内容。没有包含A2,所以我们输入000002在源数据中找不到。所以使用这个方法前,要先对需要的数据按源数据进行排序。不然,是不准确的。
通过vba可以实现读取或写入access数据库。
举例说明:
有一个小工厂,需要在车间展示订单的进展状况,实现电子看板功能,实现方案就是用vba+access数据库。
第一步:创建access数据库。下图是该数据库所涉及的表格以及kb表的部分字段。
第二步:插入用户窗体以及模块。
第三步:编制相应代码。由于篇幅所限,无法将整个过程及代码全部展示,先展示部分和数据库连接以及读取access数据库的代码。
这个是程序开始的用户登录界面用户窗体。启动该窗体需要调用数据库的用户密码表格。如图
代码如下:
Private Sub UserForm_initialize()
Dim rst As New ADODB.Recordset
Dim mYpath As String
mYpath = ThisWorkbook.Path &"\rykb.accdb"
Set conn = CreateObject("ADODB.Connection") '这属于后期绑定
conn.ConnectionString = "Provider=Microsoft.Ace.OleDB.12.0Data Source=" &mYpath
conn.ConnectionString = conn.ConnectionString &"Jet OLEDB:Database Password=1" ‘数据库连接 密码 1
conn.Open
Sql = "SELECT * from yhgl2 " ‘获取表格yhgl2的所有字段及记录
rst.Open Sql, conn, adopenkeyset, adlockoptimistic
arr = rst.GetRows
For i = 0 To rst.RecordCount - 1
ComboBox1.AddItem arr(0, i) ‘将用户名写入控件,以便于用户选择
Next i
rst.Close
conn.Close
TextBox2.PasswordChar = "*"
End Sub
登录按钮代码如下:
Private Sub CommandButton1_Click()
Dim rst As New ADODB.Recordset
Dim mYpath As String
Dim YHM As String '用户名
Dim MM As String '密码
Dim YHZ As String
YHM = TextBox1.Text
MM = TextBox2.Text
mYpath = ThisWorkbook.Path &"\rykb.accdb"
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=Microsoft.Ace.OleDB.12.0Data Source=" &mYpath
conn.ConnectionString = conn.ConnectionString &"Jet OLEDB:Database Password=1"
conn.Open
Sql = "SELECT * from yhgl2 WHERE 用户名 = " &"'" &YHM &"'"
rst.Open Sql, conn, adopenkeyset, adlockoptimistic
BJ = False '标记默认为false
If rst.RecordCount <1 Then
MsgBox ("该用户不存在!")
Else
arr = rst.GetRows
If arr(2, 0) = MM Then BJ = True
If BJ = False Then
MsgBox ("密码不正确!")
End If
End If
If BJ Then
YHZ = arr(1, 0)
Sql = "SELECT * from yhgl1 WHERE 用户组名 = " &"'" &YHZ &"'"
rst.Close
rst.Open Sql, conn, adopenkeyset, adlockoptimistic
arr = rst.GetRows
qx1 = arr(1, 0)
qx2 = arr(2, 0)
qx3 = arr(3, 0)
qx4 = arr(4, 0)
qx5 = arr(5, 0)
qx6 = arr(6, 0)
qx7 = arr(7, 0)
Unload Me
Call main(qx1, qx2, qx3, qx4, qx5, qx6, qx7)
End If
rst.Close
conn.Close
End Sub
运行代码的效果如图:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)