我正在尝试从 SQL Server 获取 Excel 中的单元格下拉值。我不想使用将所有数据放到另一张表的方法,并使用数据验证来控制下拉值。这总是给我一堆空行,因为我想确保我有空间在数据库中添加任何内容。
有没有办法直接从 SQL Server 检索下拉值?使用类似的语句:
Select name from employees
谢谢你的帮助...
我正在尝试从 SQL Server 获取 Excel 中的单元格下拉值。我不想使用将所有数据放到另一张表的方法,并使用数据验证来控制下拉值。这总是给我一堆空行,因为我想确保我有空间在数据库中添加任何内容。
有没有办法直接从 SQL Server 检索下拉值?使用类似的语句:
Select name from employees
谢谢你的帮助...
使用 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 。
您可以使用 Excel 中的 MS 查询向导来存储查询并随时使用它的数据。
此链接了解详细信息http://www.techrepublic.com/article/use-excels-ms-query-wizard-to-query-access-databases/