MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Erro de Null ao exportar para TXT

    avatar
    alantb
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 235
    Registrado : 25/07/2017

    [Resolvido]Erro de Null ao exportar para TXT Empty [Resolvido]Erro de Null ao exportar para TXT

    Mensagem  alantb 29/6/2021, 15:56

    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

    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1552
    Registrado : 13/12/2016

    [Resolvido]Erro de Null ao exportar para TXT Empty Re: [Resolvido]Erro de Null ao exportar para TXT

    Mensagem  Alexandre Fim 29/6/2021, 16:15

    Olá Alan,

    Faça o seguinte ajuste:

    Código:


      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
          if not isnull(rst!rst!E3) and not isnull(rst!S3) then
            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
          end if
          rst.MoveNext
      Next varCount





    []'s

    FIM


    .................................................................................
    - Procure sempre anexar seu projeto para análise do problema/dúvida.
    - Ao copiar/colar um código VBA, procure entender seu funcionamento.
    - Se o problema foi resolvido, não se esqueça de marcar o tópico como RESOLVIDO.
    avatar
    alantb
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 235
    Registrado : 25/07/2017

    [Resolvido]Erro de Null ao exportar para TXT Empty Re: [Resolvido]Erro de Null ao exportar para TXT

    Mensagem  alantb 29/6/2021, 20:10

    Alexandre, deu certo as alterações. Pra encerrar só mais um detalhe: os registros estão falhando uma linha, como remover a linha em branco entre os registros do txt??

    ALAN
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1552
    Registrado : 13/12/2016

    [Resolvido]Erro de Null ao exportar para TXT Empty Re: [Resolvido]Erro de Null ao exportar para TXT

    Mensagem  Alexandre Fim 29/6/2021, 20:38

    Alan,

    Provavelmente, a linha em branco é devido a constante "vbCrLf" no final da linha, antes do IF.
    Print #1, TamanhoD(rst!DtHorario, 10) & TamanhoD(rst!S2, 5) & TamanhoD(rst!Matricula, 6) & TamanhoD(rst!NroRelogio, 2) & TamanhoD(rst!CodJustificativa, 2) & vbCrLf


    Tente isso:

    Código:


      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)
          If Not IsNull(rst!rst!E3) And Not IsNull(rst!S3) Then
            Print #1, vbCrLf & 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
          End If
          rst.MoveNext
      Next varCount





    []'s

    FIM


    .................................................................................
    - Procure sempre anexar seu projeto para análise do problema/dúvida.
    - Ao copiar/colar um código VBA, procure entender seu funcionamento.
    - Se o problema foi resolvido, não se esqueça de marcar o tópico como RESOLVIDO.
    avatar
    alantb
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 235
    Registrado : 25/07/2017

    [Resolvido]Erro de Null ao exportar para TXT Empty Re: [Resolvido]Erro de Null ao exportar para TXT

    Mensagem  alantb 29/6/2021, 20:54

    Alexandre, bastou tirar as constantes vbCrLf do final de cada linha e deu tudo certo, obrigado pelas dicas e encerramos por aqui. Até....

    ALAN
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1552
    Registrado : 13/12/2016

    [Resolvido]Erro de Null ao exportar para TXT Empty Re: [Resolvido]Erro de Null ao exportar para TXT

    Mensagem  Alexandre Fim 29/6/2021, 21:04

    Valeu Alan cheers cheers
    O fórum agradece.

    Sucesso !!!


    .................................................................................
    - Procure sempre anexar seu projeto para análise do problema/dúvida.
    - Ao copiar/colar um código VBA, procure entender seu funcionamento.
    - Se o problema foi resolvido, não se esqueça de marcar o tópico como RESOLVIDO.

      Data/hora atual: 25/7/2021, 03:36