Vídeo recomendado
https://youtu.be/diWPPPhW-9E

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 »

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: 1537
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 »

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


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 »

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 »

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: 1537
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 »

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.


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 »

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: 1537
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 »

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


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 »

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


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
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 »

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


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 »

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