2014-07-16 186 views
0

现在我有一个excel电子表格,其中包含一个按钮,指派给我从SQL服务器提取数据的宏。现在它只能拉我告诉它的整个桌子。从VBA调用excel公式

我正在做这件事的人希望它走的更远,以便他们可以在单元格B1中输入SQL命令,并且当按下按钮时,它将运行包含在单元格b1中的语句。因此,并非只能够运行宏中包含的语句并从SQL服务器反复提取同一个表,该按钮将能够运行单元格B1中包含的任何语句,从而使宏容易更改。

例如:现在宏从雇员表中提取所有信息(select * from employees),但是我想将该语句更改为类似于(调用单元格B1)的内容,然后它将运行单元格B1内的任何内容无需进入VBA即可轻松更改。

+1

如果您的最终用户知道sql,为什么不直接给他/她的SQL管理工作室? Excel似乎是一个糟糕的SQL语句库。如果你在数据库中保存了SQL语句并且只是'EXEC''d他们呢? – paqogomez

+0

用户专门只想使用前端sql。不要问我为什么。有很多其他更简单的方法可以将数据从sql抓取到excel中,但是我只是按照我的指定进行操作。 –

回答

2

我会一个电话到一个公共功能,你现在所拥有的SQL命令,我将annote作为

Private Sub CommandButton1_Click() 
'dim some objects and file paths, ect 
With *some database* 
    DoCmd.RunSQL "SELECT * FROM Employees" 
End With 
End Sub 

以下

Private Sub CommandButton1_Click() 
'dim objects and file paths again 
With *some database* 
    DoCmd.RunSQL(SQLSetup) 
End with 
End Sub 

Public Function SQLSetup() as String 
SQLSetup = Application.ThisWorkBook.Cells(X,Y).Value 
End Sub 

当然的地方,有很多方法可以改善这一点。您可以将SQL语句的每个元素分解为一个新单元格,并将这些单元格值在函数中一起使用。但是,只要访问单元格中的值并将其传递到可以放入SQL语句中的变量中,就可以粗略地估计出您需要的值。

+1

我在写完全相同的文字时只有一半的时间,只是不太好。 – RowanC

+0

Cronos2546;我有一些代码,我希望你看看你是否有时间。我试图实现你的一些例子,但没有任何运气。链接如下: http://stackoverflow.com/questions/24767306/vba-code-cannot-connect-to-sql-server-2008/24768462?noredirect=1#comment38458629_24768462 –

+0

没关系!得到它的工作。 。开放范围(“B1”)。公式取得了诀窍;) –