2

我正在尝试从 SQL Server 获取 Excel 中的单元格下拉值。我不想使用将所有数据放到另一张表的方法,并使用数据验证来控制下拉值。这总是给我一堆空行,因为我想确保我有空间在数据库中添加任何内容。

有没有办法直接从 SQL Server 检索下拉值?使用类似的语句:

Select name from employees

谢谢你的帮助...

4

2 回答 2

0

使用 ADODB 检索您想要的值,并使用检索到的值在 Excel 中填充您可以动态创建的下拉形状。

在类似的情况下,由于源数据基本上是静态的,因此我在应用程序启动时从 ADODB 记录集中填充了一个全局数组,并在填充下拉列表中的项目时使用了该数组。这是该代码的片段:

Dim InstrumentIDs() As String
Dim InstrumentIDReader As Integer
Dim InstrumentIDCount As Integer
Public PositionRange As String

Public Sub GetInstrumentIDs()
'
'Populate InstrumentIDs array from current contents of Instrument table in   EMS database
'
   Dim conn As New ADODB.Connection
   Dim rs As New ADODB.Recordset
   Dim sql As String
   Dim loader As Integer, sn As String

   InstrumentIDReader = 0
   On Error GoTo GetInstrumentError
   conn.ConnectionString = "Provider=sqloledb; Data Source=myServer; Initial Catalog=myDatabase; User ID=myUser;Password=myPassword"
   conn.Open
   sql = "Select Count([SerialNo]) As [Number] From [Instrument]"
   rs.Open sql, conn, adOpenStatic
   InstrumentIDCount = CInt(rs![Number])
   ReDim InstrumentIDs(InstrumentIDCount - 1)
   rs.Close
   sql = "Select [SerialNo] From [Instrument] Order By [SerialNo]"
   rs.Open sql, conn, adOpenForwardOnly
   loader = 0
   rs.MoveFirst
   Do While Not rs.EOF
       sn = CStr(rs![SerialNo])
       InstrumentIDs(loader) = sn
       loader = loader + 1
       rs.MoveNext
   Loop
   rs.Close
   conn.Close
   Set rs = Nothing
   Set conn = Nothing
   Exit Sub
GetInstrumentError:
   MsgBox "Error loading instruments: " & Err.Description
End Sub

您必须在 VBA 编辑器中的工具 > 参考中设置对 Microsoft ActiveX 数据对象 mn 库的引用(我的计算机上的最新版本是 2.8)。

有关如何在 Excel 中管理下拉框的提示,请参阅文章 http://www.thespreadsheetguru.com/blog/2014/5/14/vba-for-excels-form-control-combo-boxes 。

于 2016-06-24T20:15:57.793 回答
-1

您可以使用 Excel 中的 MS 查询向导来存储查询并随时使用它的数据。

此链接了解详细信息http://www.techrepublic.com/article/use-excels-ms-query-wizard-to-query-access-databases/

于 2013-08-26T17:03:10.947 回答