Me parece que tienes algún error de concepto pues EOF no devuelve el número de registros del resulset.
Código:
Dim rs3 As ADODB.Recordset
Set rs3 = New ADODB.Recordset
sql3 = "SELECT cod_oper,hor_ini,hor_fin from horario where dia= '" & Lunes & "'"
rs3.Open sql3, cn_tups, adOpenKeyset, adLockOptimistic, adCmdText
'Iniciamos nñumero de columnas y nos posicionamos en el primer registro.
listado.rows = 2
rs3.Movefirst
do until (rs3.EOF OR rs3.BOF OR rs3.Nomatch)
i = Listado.rows-1
listado.TextMatrix(i, 0) = rs3.Fields("cod_oper")
listado.Rows = listado.rows+1
'Movemos al siguiente registro del resultset
rs3.movenext
'Liberamos procesador
DoEvents
loop
listado.refresh
No hagas Copiar y Pegar con este código, estudia su comportamiento yajusta todo lo necesario para que funcione como deseas pues lo he escrito 'al vuelo' y puedo haber cometido errores sintácticos.