Olá pessoal, estou utilizando para exportação de horários de ponto uma dica que pesquisei aqui no forum e que, a principio, faz o que preciso. A origem dos dados é uma consulta. Entretanto funciona bem com TODOS campos preenchidos, sendo que em certas ocasiões nem todos os campos dos meus registros estão com dados. Observem que a segunda coluna a ser exportada é E1 (Entrada 1), depois S1 (Saída 1), e assim por diante.E1,S1,E2 e S2 se refere ao horário normal trabalhado. A partir de E3 já é hora extra, e nem sempre esses campos estão preenchidos. A dúvida é a seguinte: como filtrar os registros que contenham nem todos campos preenchidos. Ao inserir a linha de exportação de E3 em diante, que contém campos vazios, dá erro de "Uso de Null inválido". Como contornar isso???
ALAN
Private Sub cmdExportar_Click()
Dim rst As Recordset, varRecCount As Integer, varCount As Integer
Dim varArq As String
'Dim DB As Database
'On Error GoTo TrataErro
Set db = CurrentDb()
'Set rst = DB.OpenRecordset("MODELO", dbOpenTable) 'se for tabelas, no caso aqui MODELO é um subformulario
Set rst = db.OpenRecordset("ConsultaRelEspelhoExp") 'se for consultas
rst.MoveLast
varRecCount = rst.RecordCount
rst.MoveFirst
varArq = Application.CurrentProject.Path & "\Apontamentos.txt"
'Tenta abrir o arquivo em caso de erro GerenErro
Open varArq For Output As #1
For varCount = 1 To varRecCount
'Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!E1, 5) & TamanhoD(rst!S1, 5) & TamanhoD(rst!E2, 5) & TamanhoD(rst!S2, 5) & TamanhoD(rst!E3, 5) & TamanhoD(rst!S3, 5) & TamanhoD(rst!E4, 5) & TamanhoD(rst!S4, 5) & TamanhoD(rst!E5, 5) & TamanhoD(rst!S5, 5) & TamanhoD(rst!E6, 5) & TamanhoD(rst!S6, 5) & TamanhoD(rst!E7, 5) & TamanhoD(rst!S7, 5) & TamanhoD(rst!E8, 5) & TamanhoD(rst!S8, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2)
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!E1, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!S1, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!E2, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!S2, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!E3, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!S3, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
rst.MoveNext
Next varCount
Close #1
rst.Close
Set db = Nothing
MsgBox "Arquivo TXT foi criado em: " & varArq, vbInformation, "Atenção"
Exit Sub
TrataErro:
If Err.Number = 94 Then
Exit Sub
End If
End Sub
Function TamanhoD(ByVal c As String, n As Integer) As String
If Len(c & "") <= n Then
TamanhoD = c & String(n - Len(c & ""), " ")
Else
TamanhoD = Left(c, n)
End If
TamanhoD = TamanhoD & " "
End Function
ALAN
Private Sub cmdExportar_Click()
Dim rst As Recordset, varRecCount As Integer, varCount As Integer
Dim varArq As String
'Dim DB As Database
'On Error GoTo TrataErro
Set db = CurrentDb()
'Set rst = DB.OpenRecordset("MODELO", dbOpenTable) 'se for tabelas, no caso aqui MODELO é um subformulario
Set rst = db.OpenRecordset("ConsultaRelEspelhoExp") 'se for consultas
rst.MoveLast
varRecCount = rst.RecordCount
rst.MoveFirst
varArq = Application.CurrentProject.Path & "\Apontamentos.txt"
'Tenta abrir o arquivo em caso de erro GerenErro
Open varArq For Output As #1
For varCount = 1 To varRecCount
'Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!E1, 5) & TamanhoD(rst!S1, 5) & TamanhoD(rst!E2, 5) & TamanhoD(rst!S2, 5) & TamanhoD(rst!E3, 5) & TamanhoD(rst!S3, 5) & TamanhoD(rst!E4, 5) & TamanhoD(rst!S4, 5) & TamanhoD(rst!E5, 5) & TamanhoD(rst!S5, 5) & TamanhoD(rst!E6, 5) & TamanhoD(rst!S6, 5) & TamanhoD(rst!E7, 5) & TamanhoD(rst!S7, 5) & TamanhoD(rst!E8, 5) & TamanhoD(rst!S8, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2)
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!E1, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!S1, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!E2, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!S2, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!E3, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!S3, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf
rst.MoveNext
Next varCount
Close #1
rst.Close
Set db = Nothing
MsgBox "Arquivo TXT foi criado em: " & varArq, vbInformation, "Atenção"
Exit Sub
TrataErro:
If Err.Number = 94 Then
Exit Sub
End If
End Sub
Function TamanhoD(ByVal c As String, n As Integer) As String
If Len(c & "") <= n Then
TamanhoD = c & String(n - Len(c & ""), " ")
Else
TamanhoD = Left(c, n)
End If
TamanhoD = TamanhoD & " "
End Function