Esqueceu sua senha? Você pode usar o mecanismo de lembrete neste link: Recuperar senha

Você receberá um link de reativação no email cadastrado.

Não recebeu o email? Lembre-se checar o Lixo Eletrônico.

dúvida sobre a função Split

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Baldocchi
Colaborador
Colaborador
Mensagens: 15
Registrado em: Qua Ago 09, 2017 8:38 am

dúvida sobre a função Split

Mensagem por Baldocchi » Qui Nov 21, 2019 2:01 pm

Eu tenho o seguinte comando: a = Split(Str, ";")

Onde "a" e "Str" são variáveis.

Declarei a variável "a" assim: Dim a() as String

Eu preciso saber qual é o tamanho de "a" (quantos ; essa variável traz) de modo que eu possa criar um "Loop" que trabalho de acordo com o tamanho dessa variável e não dê erro na execução do código.

Por favor, alguém pode me ajudar?



Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1271
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: dúvida sobre a função Split

Mensagem por Reinaldo » Qui Nov 21, 2019 2:40 pm

função Split gera uma "matriz" com todos os "campos" entre o fator de separação, em seu exemplo ";".
Para utilizar pode-se manipular as Funções Lbound e Ubound (https://docs.microsoft.com/pt-br/office ... d-function
http://ptcomputador.com/P/visual-basics ... 94527.html
Será algo +/- assim

Código: Selecionar todos

For x=Lbound(a) to Ubound(a)
'aqui seu codigo por exemplo
msgbox a(x)
next


Reinaldo
Gostou da resposta?:?: :oops: :D :mrgreen:

Baldocchi
Colaborador
Colaborador
Mensagens: 15
Registrado em: Qua Ago 09, 2017 8:38 am

Re: dúvida sobre a função Split

Mensagem por Baldocchi » Qui Nov 21, 2019 2:52 pm

muito obrigado, vou testar e te retorno



Baldocchi
Colaborador
Colaborador
Mensagens: 15
Registrado em: Qua Ago 09, 2017 8:38 am

Re: dúvida sobre a função Split

Mensagem por Baldocchi » Qui Nov 21, 2019 3:09 pm

oi, desculpa minha burrice, rsrs, mas não consegui encaixar na planinha que eu preciso.
- Eu preciso importar um html que contém tabelas;
- O conteúdo é diferente entre as células das tabelas html.
então, eu preciso fazer o código verificar se a string contém ; ou : e calcular o total de itens encontrados.

eu fiz o código abaixo, porém ele está estático com 15 variáveis para a matriz, porém tem linhas no html que tem 15 itens; tem linhas que tem 10 itens; tem linhas que estão separadas por ; e outras linhas por : . Eu coloquei dentro do For do seu código todo o meu código, porém, quando o excel importou o html veio o mesmo valor nas 15 células.

If b <> " " Then
Str = b
a = Split(Str, ";")
If a(1) <> "" Then
Sheets(3).Cells(iRow, 1) = a(1)
If a(2) <> " " Then
Sheets(3).Cells(iRow, 2) = a(2)
End If
Sheets(3).Cells(iRow, 3) = a(1)
Sheets(3).Cells(iRow, 4) = a(2)
Sheets(3).Cells(iRow, 5) = a(3)
Sheets(3).Cells(iRow, 6) = a(4)
Sheets(3).Cells(iRow, 7) = a(5)
Sheets(3).Cells(iRow, 8) = a(6)
Sheets(3).Cells(iRow, 9) = a(7)
Sheets(3).Cells(iRow, 10) = a(8)
Sheets(3).Cells(iRow, 11) = a(9)
Sheets(3).Cells(iRow, 12) = a(10)
Sheets(3).Cells(iRow, 13) = a(11)
Sheets(3).Cells(iRow, 14) = a(12)
Sheets(3).Cells(iRow, 15) = a(13)
Sheets(3).Cells(iRow, 16) = a(14)
Sheets(3).Cells(iRow, 17) = a(15)
End If
End if


eu fiz uma planilha e coloquei aqui: https://drive.google.com/file/d/1WAqIGJ ... sp=sharing



Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1271
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: dúvida sobre a função Split

Mensagem por Reinaldo » Qui Nov 21, 2019 3:22 pm

Não entendi o motivo de a(1) nas colunas 1 e 3 e a(2) nas colunas 2 e 4, e realmente necessário essa duplicidade?
O que fazer quando a linha "splitada" não tiver ";"?
Editado pela última vez por Reinaldo em Qui Nov 21, 2019 3:45 pm, em um total de 1 vez.


Reinaldo
Gostou da resposta?:?: :oops: :D :mrgreen:

Baldocchi
Colaborador
Colaborador
Mensagens: 15
Registrado em: Qua Ago 09, 2017 8:38 am

Re: dúvida sobre a função Split

Mensagem por Baldocchi » Qui Nov 21, 2019 3:39 pm

acho que não, tenho quase certeza que não.
Eu programo há muito em Pascal, em VBA comecei este ano, ainda estou apanhando basante. Desculpa minha falta de conhecimento em vba, rsrs



Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1271
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: dúvida sobre a função Split

Mensagem por Reinaldo » Qui Nov 21, 2019 3:47 pm

Sem problema, mas O que fazer quando a linha "splitada" não tiver ";"?


Reinaldo
Gostou da resposta?:?: :oops: :D :mrgreen:

Baldocchi
Colaborador
Colaborador
Mensagens: 15
Registrado em: Qua Ago 09, 2017 8:38 am

Re: dúvida sobre a função Split

Mensagem por Baldocchi » Qui Nov 21, 2019 3:54 pm

a linha terá : ou ; - são essas as informações que o html traz.



Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1271
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: dúvida sobre a função Split

Mensagem por Reinaldo » Qui Nov 21, 2019 4:24 pm

Desculpe estar fazendo muitas perguntas, mas não consegui entender a "mecânica" da rotina, creio que onde está alocado o loop não seja o local apropriado.
Incluir o loop é relativamente simples;
seria algo +/-assim:

Código: Selecionar todos

 Sub HTML_Table_To_Excel()
Dim htm As Object, Tr As Object
Dim Td As Object, Tab1 As Object
    
'Página a ser baixada
Web_URL = VBA.Trim(Sheets(1).Cells(1, 1))

'Cria o objeto HTMLFile
Set HTML_Content = CreateObject("htmlfile")

'Atribui a página da web ao objeto HTMLFile
With CreateObject("msxml2.xmlhttp")
    .Open "GET", Web_URL, False
    .send
    HTML_Content.Body.Innerhtml = .responseText
End With

Column_Num_To_Start = 1
iRow = 2
iCol = Column_Num_To_Start
iTable = 0

'Loop na(s) Tabela(s) e importa para o Excel (";" é o separador padrão)
Dim n As Long, x As Long
n = 9
For Each Tab1 In HTML_Content.getElementsByTagName("table")
    With HTML_Content.getElementsByTagName("table")(iTable)
        For Each Tr In .Rows
            For Each Td In Tr.Cells
                Sheets(1).Cells(iRow, iCol).Select
                Sheets(1).Cells(iRow, iCol) = Td.innerText

                If ActiveCell.Row >= n Then
                    Dim b As String
                    b = Sheets(1).Cells(iRow, iCol)
                    Dim a() As String
                    Dim Str As String
                    If b <> " " Then
                        Str = b
                        If InStr(";", Str) > 0 Then
                            a = Split(Str, ";")
                            For x = LBound(a) To UBound(a)
                                'aqui seu codigo por exemplo
                                Sheets(3).Cells(iRow, x + 1) = a(x)
                            Next x
                        Else
                            'Resume Next
                            'a = Split(Str, ":")
                        End If
                    End If
                End If
    '******************************************************
            n = n + 1
            iCol = iCol + 1
            Next Td
        iCol = Column_Num_To_Start
        iRow = iRow + 1
        Next Tr
    End With
iTable = iTable + 1
iCol = Column_Num_To_Start
iRow = iRow + 1
Next Tab1
    MsgBox "Processo Completado"
End Sub


Reinaldo
Gostou da resposta?:?: :oops: :D :mrgreen:

Baldocchi
Colaborador
Colaborador
Mensagens: 15
Registrado em: Qua Ago 09, 2017 8:38 am

Re: dúvida sobre a função Split

Mensagem por Baldocchi » Qui Nov 21, 2019 4:32 pm

muito obrigado, vou testar e te retorno



Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder