Colega eu ainda estou meio confuso quanto ao que exibir, mas vamos fazer mais esta tentativa
Private Sub cmdok_Click()
Set cn = New ADODB.Connection
Set rdvenda = New ADODB.Recordset
Set rdcfop = New ADODB.Recordset
Set rdcliente = New ADODB.Recordset
Set rditem = New ADODB.Recordset
On Error GoTo trata_erro
cn.CursorLocation = adUseClient
rdvenda.CursorLocation = adUseClient
cn.open "Provider=MSDASQL;Data Source= Prog"
rdvenda.open "SELECT * FROM Vendas where date .........", cn...........
rdcfop.open "SELECT * FROM CFOP,VENDAS where cfop.cfop = vendas.cfop ", cn...........
rdcliente.open "SELECT * FROM CLIENTES,VENDAS where CLIENTES.CPF = VENDAS.CPFCNPJ" ,cn
rditem.open "SELECT * FROM ITENSVENDAS,VENDAS where ITENSVENDAS.NF = " & rdvenda!NF , cn...
' lembrando que estou tratando o campo NF como numerico para texto entra a aspa simples
Set rdvenda.DataSource = rdvenda
If rdvenda.EOF And rdcfop.EOF And rdcliente.EOF Then
MsgBox "Não há registros no periodo informado", vbExclamation, "Exportação de dados"
Exit Sub
End If
registros = rdvenda.RecordCount
Open txtcaminho1.Text For Output As #1
Do Until rdvenda.EOF
Print #1, "20"; "|"; "I"; "|"; "|"; rdcfop!descricao; "|"; "1"; "|"; Format(rdvenda!nf, "000000000"); ""
Do While Not rditem.EOF
Print #1, "30"; "|"; rditem!codprod; "|"; rditem!materials; "|"; "|"; rditem!unidade; "|"; ""
rditem.MoveNext
Loop
Print #1, "40"; "|"; "0,00"; "|"; "0,00"; "|"; "0,00"; "|"; "0,00"; "|"; Format(rdvenda!total, "0.00"); ""
rdvenda.MoveNext
rdcfop.MoveNext
rdcliente.MoveNext
Loop
Print #1, "90"; "|"; Format(rdvenda.RecordCount, "00000"); "|";
Close #1
rdvenda.Close
rdcfop.Close
rdcliente.Close
rditem.Close
MsgBox "Foram exportados " & registros & " para o arquivo texto", vbInformation
Exit Sub
trata_erro:
MsgBox Err.Description
End Sub