Läsa in data till Combobox-objekt i arbetsblad


Här demonstreras hur vi kan läsa in data till ett Combobox-objekt i ett arbetsblad samt hur ett valt listvärde kan placeras i ett textfält.

Här används Combobox-kontrollen från verktygsfältet Kontroller samt Textbox-kontrollen från MS Form 2.0 som nås via verktygsfältet Kontroller.

 

Option Explicit

Private Sub ComboBox1_Change()

   '© 2004 Alla rättigheter XL-Dennis

   Dim cnt As ADODB.Connection

   Dim rst As ADODB.Recordset

   Dim stDB As String, stSQL As String

   Dim stDatum As String, stCon As String

 

   'Felhantering nödvändig då växling till bladet

   'renderar i att Comboboxen töms vilket i sin tur

   'initierar denna Change-händelse

   If ComboBox1.ListIndex = -1 Then Exit Sub

 

   'Sökväg till och namn på databasen.

   stDB = ThisWorkbook.Path & "\" & "XLData1.mdb"

 

   'Skapa anslutningssträngen.

   stCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

                "Data Source=" & stDB & ";" & _

                "Jet OLEDB:Database Password=dennis;"

 

   stDatum = ComboBox1.Text

 

   'SQL-frågan. 

   stSQL = "SELECT [UT]" & _

                " FROM [tblData]" & _

                " WHERE [IN]= # " & stDatum & "  # "

 

   'Instansierar ADO-objekten. 

   Set cnt = New ADODB.Connection

   Set rst = New ADODB.Recordset

 

   'Öppnar anslutningen 

   cnt.Open stCon

 

   With rst

      .CursorType = adOpenStatic

      .CursorLocation = adUseClient 'Förutsättning för att frikoppla recordset.

      .Open stSQL, cnt, , adCmdText 'Öppnar recordset.

      Set .ActiveConnection = Nothing 'Frikopplar recordset.

   End With

 
  
'Stänger anslutningen.
  
cnt.Close

 

   'Tilldelar Textbox-kontrollen det erhållna värdet.

   Me.TextBox1.Text = rst.Fields(0).Value

 

   'Stänger recordset.
  
rst.Close

 

   'Frigör objekt från minnet.

   Set rst = Nothing

   Set cnt = Nothing

End Sub

 

Option Explicit

 Private Sub Worksheet_Activate()

   '© 2004 Alla rättigheter XL-Dennis

   Dim cnt As ADODB.Connection

   Dim rst As ADODB.Recordset

   Dim stDB As String, stCon As String, stSQL As String

   Dim vaData As Variant

 

   'Sökväg och namn på databasen.

   stDB = ThisWorkbook.Path & "\" & "XLData1.mdb"

 

   'Skapa anslutningssträngen.

   stCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

                "Data Source=" & stDB & ";" & _

                "Jet OLEDB:Database Password=dennis;"

 

   'SQL-frågan.

   stSQL = "SELECT [In]" & _

                " FROM [tblData]" & _

                " ORDER BY [In];"

 

   'Instansiera ADO-objekten.

   Set cnt = New ADODB.Connection

   Set rst = New ADODB.Recordset

 

   'Öppnar anslutningen.

   cnt.Open stCon

 

   With rst

      .CursorType = adOpenStatic

      .CursorLocation = adUseClient

      .Open stSQL, cnt, , adCmdText 'Öppnar recordset.

      Set .ActiveConnection = Nothing 'Frikopplar recordset.

      vaData = .GetRows 'Tilldela arrayen hela recordset.

   End With

 

   'Stänger anslutningen.

   cnt.Close

 

   With Me.ComboBox1

      .Clear

      .List = Application.Transpose(vaData)

      .ListIndex = -1

   End With

 

   'Frigör objekt från minnet.

   rst.Close

   Set rst = Nothing

   Set cnt = Nothing

 

End Sub