Excel加载项查询访问数据库

时间:2013-10-24 16:49:06

标签: sql excel ms-access vlookup

我有一个包含所有部件的Access数据库。我正在制作一个Excel加载项供用户使用。他们可以通过执行以下操作(在任何excel单元格中)查询零件:

=MUN("VOLTAGE",A3)

此函数将查询Access数据库并找到与PARTNO值对应的VOLTAGE值(在这种情况下,PARTNO值位于用户Excel文件的单元格“A3”中)。

当我开始创建加载项时,我只在Excel中测试所有内容(我的数据库在Excel中),我很快意识到这是愚蠢的。

这是我的VBA完全在EXCEL:

Function MUN(what, partNo)
Dim ws As Worksheet, aCell As Range, pos As String, tablex As String, LastColumn As Integer, LastRow As Long, LastCell As Range, LastC As String, LastR As Integer

p = "P:\Engineering\Programs"
f = "partsDB.xls"
s = "Sheet1"
path = "'" & p & "[" & f & "]" & s & "'!"
Set ws = ActiveWorkbook.Sheets("table")

    'DETERMINES THE LAST COLUMN AND ROW USED IN THE WORKSHEET (THIS WILL HELP DETERMINE THE TABLE FOR VLOOKUP)
    LastRow = Cells.Find(what:="*", after:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LastColumn = Cells.Find(what:="*", after:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    LastC = Replace(Cells(1, LastColumn).Address(False, False), "1", "")
    LastR = Cells(Rows.Count, "a").End(xlUp).Row

    'DETERMINES THE COLUMN POSITION OF THE "WHAT"
    Set aCell = ws.Rows(1).Find(what:=UCase(what), LookIn:=xlValues, _
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
    pos = aCell.Column

    'SETS THE TABLE
    tablex = "A$1:" & LastC & "$" & LastR

    MUN = Application.WorksheetFunction.VLookup(partNo, Range(tablex), pos, False)
End Function

我遇到了另一个问题。我需要做一个有多个参数的VLOOKUP。我需要做一个VLOOKUP,其中XX =“XXX”,YY =“YYY”,然后返回“ZZZ”。

由于MS Access可以使用SQL查询,如何连接到Access数据库并执行将复制上述函数中的内容的查询,还执行具有多个参数的VLOOKUP?

1 个答案:

答案 0 :(得分:0)

VBA中的

执行以下操作:

dim accdb as object
set accdb = CreateObject("Access.Application")
accdb.Open "your access database path" 

注意:您的访问数据库需要在每个人都可以访问它的地方

然后我在想(我没有经验从excel这样做 - 我从访问中使用excel) - 你需要像db对象一样实例化以使用当前数据库,并使用exql执行sql语句该db对象用于检索所需的数据。

对不起,这不是一个非常完整的答案,但它可能足以让你开始。