Excel VBA:具有多列的表单控件列表框 - 如何从ADO记录集填充?

时间:2017-01-11 18:01:49

标签: excel vba controls

由于兼容性问题,我不得不在电子表格中使用Excel 表单控件列表框(与ActiveX)控件。我试图用ADO记录集中的三个字段填充它,但我遇到了问题,因为我已经使用了Form Controls。

这是我为ActiveX列表框编写的代码。您能否指出一个示例,其中从ADO记录集中填充了具有多列的表单控件列表框?

提前感谢您在进行此转化时提供的任何帮助!

- 汤姆

Private Sub Worksheet_Activate()
 On Error GoTo Err_Worksheet_Activate
 Dim cnn As ADODB.Connection
 Dim rst As ADODB.Recordset
 Dim i As Integer

     Set cnn = New ADODB.Connection

     cnn.ConnectionString = gcstr_Connection ' a global property with the connection string defined elsewhere. The connection is to a SQL Server database.

      cnn.Open

      Set rst = cnn.Execute("SELECT [FieldA], [FieldB], [FieldC] FROM dbo.", , adCmdText)

      rst.MoveFirst

      With Me.lst_System
          .Clear
          Do
          .AddItem
          .List(i, 0) = rst![FieldA]
          .List(i, 1) = rst![FieldB]
          .List(i, 2) = rst![FieldC]
          i = i + 1
              rst.MoveNext
          Loop Until rst.EOF
      End With

 Exit_Worksheet_Activate:
      On Error Resume Next
      rst.Close
      cnn.Close
      Set rst = Nothing
      Set cnn = Nothing
      Exit Sub

 Err_Worksheet_Activate:
      MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!"
      Err.Clear
      Resume Exit_Worksheet_Activate
 End Sub

1 个答案:

答案 0 :(得分:0)

不知道Form控件是否可以支持像ActiveX列表框这样的muticolumns,因此您可能需要考虑以不同的方式添加它们。

以下是如何删除所有/添加项目的示例,希望它有所帮助:

'to remove all previous items
Me.Shapes("lst_System").ControlFormat.RemoveAllItems
'to add item
Me.Shapes("lst_System").ControlFormat.AddItem "SomeStringValue"