This sample project demonstrates how to use the ADO 2.1 Recordset and Command objects as event sources. Basically, all you need to do is declare Recordset and Command object variables using the WithEvents keyword. Once you do that, events for the the object variables are available in the event dropdown in the code window.
Option Explicit
'Declare the Connection and Recordset objects as event sources.
Private WithEvents cnNWind As Connection
Private WithEvents rsNWind As Recordset
Private Sub Command1_Click()
  Dim cmNWind As ADODB.Command
  'Instantiate Command and Connection objects.
  Set cnNWind = New Connection
  Set cmNWind = New Command
  'Open method uses Northwind DSN.
  cnNWind.Open "northwind"
  'Attach connection to the Command object.
  Set cmNWind.ActiveConnection = cnNWind
  'Compile and execute the Command object.
  With cmNWind
    .CommandText = "SELECT productname FROM products"
    .Prepared = True
  End With
  Set rsNWind = cmNWind.Execute
  'Display results.
  Set Label1.DataSource = rsNWind
  Label1.DataField = "ProductName"
  'Cleanup
  cnNWind.Close
  Set cmNWind = Nothing
  Set cnNWind = Nothing
  Set rsNWind = Nothing
End Sub
Private Sub rsNWind_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
  MsgBox "rsNWind_FetchComplete"
End Sub
Private Sub cnNWind_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
  MsgBox "cnNWind_ConnectComplete"
End Sub
Private Sub cnNWind_Disconnect(adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
  MsgBox "cnNWind_Disconnect"
End Sub
Private Sub cnNWind_InfoMessage(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
  MsgBox "Connection object attributes = " & cnNWind.Attributes
  Debug.Print cnNWind.Attributes
End Sub