创build一个返回Mysql数据的自定义Excel函数

我想创build一个自定义的Excel函数,它将单元格值作为参数来查询mysql数据库

Function excelmysql2() Dim odjDB As ADODB.Connection Dim sqlstr As String Dim rs As ADODB.Recordset Dim oRS, nRec, oFld Dim Row '---------------------------------------------------------------------- Set odjDB = New ADODB.Connection Sheets("Sheet1").Select odjDB.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver};" & _ "SERVER=192.168.0.64;" & _ "DATABASE=mifos;" & _ "Port=3307;" & _ "USER=root;" & _ "PASSWORD=admin;" Set oRS = odjDB.Execute("SELECT account.customer_id FROM mifos.account WHERE (mifos.account.account_id= '" & Range("A3").Value & "')") nRec = 0 Row = 3 Do While Not oRS.EOF For Each oFld In oRS.Fields Worksheets("Sheet1").Cells(Row, 3).Value = oRS("customer_id") Row = Row + 1 On Error Resume Next oRS.MoveNext Next Loop oRS.Close odjDB.Close End Function 

正如你注意到在函数中设置了单元格编号,因为我找不到dynamic的方法。 我想能够使用像任何Excel函数,我可以传递一个单元格的值,并从MySQL获取查询的值

我应该把什么,而不是范围(“A3”),以便能够通过传递单元格值在Excel中使用此function? (EX:= excelmysql2(A1)…)

谢谢

下面例如。 涉及到你的问题

使用它,只需更改参数….

它演示了一个查询,该查询从称为金融的数据库中称为费率的表格返回基于月和年的(汇率"MEND" )外汇汇率

 SELECT rates.MEND FROM rates WHERE rates.Cur = 'USD' AND rates.Month = JAN AND rates.Year = 2015 returns 14.35 

表:费率

Cur | 本月| 年份| 修补

ZAR | JAN | 2015 | 1.453

USD | JAN | 2015 | 14.35

 Function MySQL_Month_endRate(Curr As String, Monn As Integer, yearr As Integer) As String '################## '## Connection ## '################## Dim conn As Variant Dim rs As Variant Dim cs As String Dim query As String Dim Table_Name As String Table_Name = "rates" Dim Database_Name As String Database_Name = "finance" Set conn = CreateObject("adodb.connection") Set rs = CreateObject("adodb.recordset") cs = "DRIVER={MySQL ODBC 5.3 ANSI Driver};" cs = cs & "DATABASE=" & Database_Name & ";" cs = cs & "SERVER=127.0.0.1" conn.Open cs, "root", "root" 'UserName and Password else WindowsNT Autentication '#################### '## QUERY ## '#################### query = "SELECT rates.MEND FROM rates WHERE rates.Cur = '" & Curr & "' AND rates.Month = " & Monn & " AND rates.Year = " & yearr 'Curr As String, Monn As Integer, yearr As Debug.Print query rs.Open query, conn '#################### '## RECORD SET ## '#################### Do Until rs.EOF ' row = row + 1 ' Cells(row, 5).Value = rs.Fields("Serial key").Value Debug.Print rs.Fields("MEND").Value MySQL_Month_endRate = rs.Fields("MEND").Value rs.MoveNext Loop '##################### '## Return ## '##################### Set rs = Nothing conn.Close Set conn = Nothing 'myRibbon.Invalidate 'End errline: If Err.Description <> "" Then MsgBox Err.Description 'MsgBox Err.Description End Function