Página 1 de 1

VBA e HTML pegar valor entre string

Enviado: 09 Set 2020 às 15:07
por kiko
Boa tarde à todos, alguém saberia como poderia capturar o valor de "2 h 21 min" em um elemento que fiz Copy Element me deu essa string <span jstcache="265">2 h 21 min</span> em um determinado site.
Desde já agradeço e fico no aguardo

Re: VBA e HTML pegar valor entre string

Enviado: 09 Set 2020 às 16:12
por mucascosta
=EXT.TEXTO(A1;PROCURAR(">";A1;1)+1;10)

VBA e HTML pegar valor entre string

Enviado: 09 Set 2020 às 16:26
por kiko
mucascosta boa tarde e obrigado pela atenção dispensada, mas como usar o que foi proposto com VBA e HTML???

Re: VBA e HTML pegar valor entre string

Enviado: 09 Set 2020 às 16:44
por babdallas
Usei Expressões Regulares (REGEX).
Código: Selecionar todos
Public Function GetString(strTexto As String, strPadrao As String) As Variant
    Dim objRegExp       As Object
    Dim vrtMatches      As Variant
    Dim vrtMatch        As Variant
    Dim vrtDados()      As Variant
    Dim lngCont         As Long
    
    Set objRegExp = VBA.CreateObject("VBScript.RegExp")
    
    With objRegExp
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = strPadrao
        
        Set vrtMatches = .Execute(sourceString:=strTexto)
        
        ReDim vrtDados(1 To vrtMatches.Count)
        
        lngCont = 1
        For Each vrtMatch In vrtMatches
            vrtDados(lngCont) = vrtMatch.Value
            lngCont = lngCont + 1
        Next vrtMatch
        
        GetString = vrtDados
    End With
End Function

Public Sub Teste()
    VBA.MsgBox GetString("<span jstcache=""265"">2 h 21 min</span>", "\d h \d{1,2} min")(1)
End Sub

VBA e HTML pegar valor entre string

Enviado: 10 Set 2020 às 10:37
por kiko
babdallas bom dia e muito obrigado pela atenção dispensada, mas como usaria essa Função para pegar o ELEMENTO existente no site para retornar o valor, no caso apresentado é "2 h 21 min", mas poderia ser "21 min" ou até mesmo "2 h". Essa Função respeitaria as condições apresentadas anteriormente?
Como usaria com XMLHttpRequest As Object?
Como você percebeu não é somente um dado coletado, mas são vários na mesma solicitação.
Desde já agradeço e fico no aguardo.

Re: VBA e HTML pegar valor entre string

Enviado: 10 Set 2020 às 11:12
por babdallas
Eu tinha entendido que você tinha conseguido colocar a parte do HTML em uma string. Você conseguiu do response text do HTML para uma variável string ou não?
Se conseguiu, basta adaptar o padrão do REGEX para \d{0,2}( h ){0,1}\d{0,2}( min){0,1} na chamada da função. Eu testei e retornou o que queria usando a função que mandei na postagem anterior. Seguem alguns exemplos:
Código: Selecionar todos
GetString("<span jstcache=""265"">2 h 21 min</span>", "\d{0,2}( h ){0,1}\d{0,2}( min){0,1}")(1)
Código: Selecionar todos
GetString("<span jstcache=""265"">2 h</span>", "\d{0,2}( h ){0,1}\d{0,2}( min){0,1}")(1)
Código: Selecionar todos
GetString("<span jstcache=""265"">23 h</span>", "\d{0,2}( h ){0,1}\d{0,2}( min){0,1}")(1)
Código: Selecionar todos
GetString("<span jstcache=""265"">21 min</span>", "\d{0,2}( h ){0,1}\d{0,2}( min){0,1}")(1)

VBA e HTML pegar valor entre string

Enviado: 10 Set 2020 às 15:20
por kiko
babdallas boa tarde, mas aqui não deu.
Deu erro nessa linha ReDim vrtDados(1 To vrtMatches.Count)
fora do intervalo.
fico no aguardo. mais uma vez obrigado pela atenção

Re: VBA e HTML pegar valor entre string

Enviado: 10 Set 2020 às 16:38
por babdallas
Código: Selecionar todos
Option Explicit

Public Function GetString(strTexto As String, strPadrao As String) As String
    Dim objRegExp       As Object
    Dim vrtMatches      As Variant
    Dim vrtMatch        As Variant
    Dim vrtDados()      As Variant
    Dim lngCont         As Long
   
    Set objRegExp = VBA.CreateObject("VBScript.RegExp")
   
    With objRegExp
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = strPadrao
       
        Set vrtMatches = .Execute(sourceString:=strTexto)
       
        ReDim vrtDados(1 To vrtMatches.Count)
       
        lngCont = 0
        For Each vrtMatch In vrtMatches
            If vrtMatch.Value <> "" Then
                lngCont = lngCont + 1
                vrtDados(lngCont) = vrtMatch.Value
            End If
        Next vrtMatch
       
       ReDim Preserve vrtDados(1 To lngCont)
        GetString = vrtDados(1)
    End With
End Function

Public Sub Teste()
    VBA.MsgBox GetString("<span jstcache=""265"">2 h 21 min</span>", "(\d{1,2} h {0,1}){0,1}(\d{1,2} min){0,1}")
End Sub

VBA e HTML pegar valor entre string

Enviado: 11 Set 2020 às 11:03
por kiko
babdallas bom dia e obrigado pela atenção dispensada, com as mudanças agora funciona. Vou colocar como Resolvido e fazer alguns teste, qualquer coisa voltar a solicitar sua tal preciosa atenção.