EXCEL从数据库提取数据?

EXCEL从数据库提取数据?,第1张

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

运行代码的效果如图:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6707549.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-27
下一篇2023-03-27

发表评论

登录后才能评论

评论列表(0条)

    保存