Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
dúvida sobre a função Split
dúvida sobre a função Split
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?
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?
- Reinaldo
- 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
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
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
Re: dúvida sobre a função Split
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
- 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
- Reinaldo
- 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
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 ";"?
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.
Re: dúvida sobre a função Split
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
Eu programo há muito em Pascal, em VBA comecei este ano, ainda estou apanhando basante. Desculpa minha falta de conhecimento em vba, rsrs
- Reinaldo
- 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
Sem problema, mas O que fazer quando a linha "splitada" não tiver ";"?
- Reinaldo
- 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
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:
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