Tenho um pedaço de código que lê um texto, e procura datas, assim:
- Código:
Dim strArray() As String
Dim strParteInteira As Integer
Dim i As Integer
For i = 1 To strParteInteira '==== Vai pegar cada palavra e montar novamente, porém uma abaixo da outra
If IsDate(Format(Trim(strArray(i - 1)), "dd/mm/yyyy")) Then
If Trim(strArray(i - 1)) Like "##:##" Then VarHora = Trim(strArray(i - 1))
If Trim(strArray(i - 1)) Like "##/##/####" Then varData = Trim(strArray(i - 1))
End If
Next
Funciona lindo.
Mas se eu tiver um texto com barras, ele da erro:
(ele lê a caixinha cinza)
O erro é nº 6, "estouro" (erro em tempo de execução)
Alguém sabe como corrigir isso, para que ele leia apenas data, ou se não for possível, colocar um ON ERROR GO NEXT?
O cód completo é esse:
- Código:
Private Sub btSaveReg_Click()
Dim Resultado As VbMsgBoxResult
Resultado = MsgBox(txt_dr & ", deseja salvar esse registro?", vbYesNo, "Salvar Movimento Push [inceptionApp]")
If Resultado = vbYes Then
movimento = Replace(movimento, vbTab, "", , , vbTextCompare)
movimento = Replace(movimento, vbLf, "", , , vbTextCompare)
movimento = Replace(movimento, vbCrLf, "", , , vbTextCompare)
movimento = Replace(movimento, vbCr, "", , , vbTextCompare)
movimento = Replace(movimento, vbNullString, "", , , vbTextCompare)
movimento = Replace(movimento, vbNewLine, "", , , vbTextCompare)
movimento = Replace(movimento, " ", "", , , vbTextCompare)
Me.movimento.SetFocus
Dim varData As Date
Dim VarHora As Date
Dim strBox As String
Dim strFrase As String
Dim txtData As String
Dim txtHora As String
strBox = Forms!xMovPushAnalise![movimento]
'=====================
Dim strArray() As String
Dim strParteInteira As Integer
Dim i As Integer
'On Error GoTo Fim
strBox = Replace(strBox, ".", "") '==== Tira pontos pois se eles estiverem junto com a data ou com as horas, não será detectado
strBox = Replace(strBox, ",", "") '==== Tira pontos pois se eles estiverem junto com a data ou com as horas, não será detectado
'==== Se houver outros sinais que atrapalhem, acrescente
strArray = Split(strBox, " ") '==== Separa as palavras e coloca em uma Matriz
strParteInteira = UBound(strArray) + 1 '==== Determina quantas palavras tem a frase
If strParteInteira = 0 Then '==== Se não há palavra alguma, devolve a string da mesma forma como veio
strBox = strFrase
Exit Sub
End If
For i = 1 To strParteInteira '==== Vai pegar cada palavra e montar novamente, porém uma abaixo da outra
If IsDate(Format(Trim(strArray(i - 1)), "dd/mm/yyyy")) Then
If Trim(strArray(i - 1)) Like "##:##" Then VarHora = Trim(strArray(i - 1))
If Trim(strArray(i - 1)) Like "##/##/####" Then varData = Trim(strArray(i - 1))
End If
Next
'=====================
txtData = varData
txtHora = VarHora
Dim ResultadoMov As VbMsgBoxResult
'analisa audiencia
If (Forms!xMovPushAnalise![movimento].Text Like "*" & "Audiência" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "Audiencia" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "Conciliação" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "Conciliaçao" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "Conciliacao" & "*") Or _
(Forms!xMovPushAnalise![movimento].Text Like "*" & "AUDIÊNCIA" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "AUDIENCIA" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "CONCILIAÇÃO" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "CONCILIAÇAO" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "CONCILIACAO" & "*") Or _
(Forms!xMovPushAnalise![movimento].Text Like "*" & "audiência" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "audiencia" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "conciliação" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "conciliaçao" & "*") Or (Forms!xMovPushAnalise![movimento].Text Like "*" & "conciliacao" & "*") Then
ResultadoMov = MsgBox(txt_dr & ", eu li algo sobre uma audiência em " & txtData & " às " & txtHora & "... deseja cadastrar um compromisso de audiência na agenda?", vbYesNo, "Cadastrar Novo Compromisso")
If ResultadoMov = vbYes Then
DoCmd.OpenForm "xAgenda", acNormal
DoCmd.GoToRecord , , acNewRec
Forms!xAgenda![Combinação51].Value = Forms!processosfull![Combinação17].Value
Forms!xAgenda![Combinação53].Value = Forms!processosfull![NumProc].Value
Forms!xAgenda![Combinação49].Value = "AUDIÊNCIA"
Forms!xAgenda![DataDia].Value = txtData
Forms!xAgenda![DataHora].Value = txtHora
Forms!xAgenda![txtSubject].Value = Forms!xAgenda![Combinação49].Value & " | " & Forms!processosfull![NumProc].Value
Forms!xAgenda![txt_det].Value = Forms!xAgenda![Combinação49].Value & " | " & Forms!processosfull![NumProc].Value & " | Link Esaj: " & Forms!xAgenda![txtLinkEsaj].Value & " | Link Pasta Nuvem do Cliente: " & Forms!xAgenda![txtPastaNuvem].Value
End If
End If
'analisa publicação
If (Forms!xMovPushAnalise![movimento].Text Like "*" & "REMETIDO AO DJE" & "*") Then
ResultadoMov = MsgBox(txt_dr & ", eu vi que esse movimento é uma publicação... deseja cadastrar um compromisso de PRAZO na agenda?", vbYesNo, "Cadastrar Novo Compromisso")
Me.cmbTipoMov = "publicação"
If ResultadoMov = vbYes Then
DoCmd.OpenForm "xAgenda", acNormal
DoCmd.GoToRecord , , acNewRec
Forms!xAgenda![Combinação51].Value = Forms!xMovPushAnalise![Combinação17].Value
Forms!xAgenda![Combinação53].Value = Forms!xMovPushAnalise![NumProc].Value
Forms!xAgenda![Combinação49].Value = "PRAZO"
Forms!xAgenda![DataDia].Value = Forms!xMovPushAnalise![DataCadProc].Value
'Forms!xAgenda![DataHora].Value = "10:00"
Forms!xAgenda![txtSubject].Value = Forms!xAgenda![Combinação49].Value & " | " & Forms!xMovPushAnalise![NumProc].Value
Forms!xAgenda![txt_det].Value = Forms!xAgenda![Combinação49].Value & " | " & Forms!xMovPushAnalise![NumProc].Value & " | Link Esaj: " & Forms!xAgenda![txtLinkEsaj].Value & " | Link Pasta Nuvem do Cliente: " & Forms!xAgenda![txtPastaNuvem].Value
Dim strPrazo As String
strPrazo = InputBox(txt_dr & ", digite a seguir quantos dias de prazo quer calcular a partir da data da publicação:", "Cálculo de Prazo [inceptionApp]", "5")
Forms!xAgenda![dias_prazo].Value = strPrazo
Call Forms("xAgenda").DataDia_AfterUpdate
Dim resultadoPrazo As VbMsgBoxResult
resultadoPrazo = MsgBox(txt_dr & ", eu calculei que " & strPrazo & " dias úteis a contar da publicação no dia " & CStr(Forms!xAgenda![DataDia]) & " será dia " & CStr(Forms!xAgenda![data_fin]) & ". Deseja usar " & CStr(Forms!xAgenda![data_fin]) & " como data final do prazo?", vbYesNo, "Cadastrar Novo Compromisso")
If resultadoPrazo = vbYes Then
Forms!xAgenda![DataDia].Value = Forms!xAgenda![data_fin].Value
End If
End If
End If
Me.cmbTipoMov.Value = "andamento"
DoCmd.Close acForm, "xmovpushanalise", acSaveYes
DoCmd.OpenForm "xmovpushanalise", acNormal
Else
MsgBox "Clique no ícone X para Excluir o Registro se não desejar salvar!"
End If
End Sub