Notifications
Clear all

Código XLARRUDA gostaria de entender como funciona

23 Posts
4 Usuários
0 Reactions
2,746 Visualizações
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

o meu código eu sei como funciona, mas o código do xlarruda eu gostaria de entender como ele funciona (apenas as linhas que ele acrescentou ao meu código)

eu ia postar no tópico que ele respondeu, porém eu não consegui.

MEU CÓDIGO

If Range("A2") = 123456789 Then
            
    MsgBox "Pode continuar", vbInformation, "aviso"
    
    Range("Tabela1").Select
    Selection.Copy
    Sheets("Plan3").Select
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Cells.Select
    Cells.EntireColumn.AutoFit
    Range("A1").Select
    
    Else
    
    Application.Visible = False
    
    MsgBox "atenção! você não tem uma licença válida para usar esse sistema.", vbCritical, "erro"
           
    Application.DisplayAlerts = False
    
    Application.Quit
    
    End If

CÓDIGO XLARRUDA

'gostaria de ajuda para entender o que cada linha do código do xlarruda está fazendo :)

Sub Macro1()
   Dim ul As Long
   ul = Plan2.Range("A" & Rows.Count).End(xlUp).Row
   
    Sheets("BASE DE DADOS").Select
    For i = 2 To ul
    If Plan2.Range("A" & i).Value <> "123456789" Then
    Application.Visible = False
      
    Application.DisplayAlerts = False
    MsgBox "atenção! você não tem uma licença válida para usar esse sistema.", vbCritical, "erro"
    Application.Quit
    Exit Sub
    End If
    Next i
    Range("Tabela1").Select
    Selection.Copy
    Sheets("Plan3").Select
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Cells.Select
    Cells.EntireColumn.AutoFit
    Range("A1").Select
    
End Sub

agradeço muito a quem colaborar e dispor de tempo para me explicar

 
Postado : 09/05/2018 10:45 am
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

JNEXCEL acho que você quer saber sobre o laço For next:

Imagine o seguinte. Eu quero escrever "JNEXCEL" da célula A1 até a célua A5.

Por VBA eu poderia fazer assim:

Sub escrever()
Plan1.range("A1").value = "JNEXCEL"
Plan1.range("A2").value = "JNEXCEL"
Plan1.range("A3").value = "JNEXCEL"
Plan1.range("A4").value = "JNEXCEL"
Plan1.range("A5").value = "JNEXCEL"
End Sub

Mas também posso fazer assim:

Sub escrever2()
For i = 1 to 5
Plan1.range("A" & i).value = "JNEXEL"
Next i
End Sub

Já imaginou se eu quisesse escrever "JNEXCEL" até a célula 3000?
Qual código daria mais trabaho?

Nesse segundo caso a variável i ganha um valor diferente a cada loop.
Primeiramente ela vale 1. Ou seja Plan1.range("A1").value = "JNEXEL"
depois ela vale 2. Ou seja Plan1.range("A2").value = "JNEXEL"
depois ela vale 3
depois 4
e por ultimo i vale 5.

Toda vez que que o codigo bate em Next, ele faz um loop , muda a variável i para o proximo valor e executa o comando.

Não sei se consegui explicar muito bem

Tente você mesmo e verá que não tem mistério...

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 09/05/2018 11:21 am
(@teleguiado)
Posts: 142
Estimable Member
 

xlarruda, pelo que eu entendi do código do JNEXCEL ele esta verificando se na célula "A2" é igual a 123456789. Se for é para copiar a Tabela 1 e colar na plan3.

O seu código esta fazendo um Loop na coluna A e verificando se não tiver igual a 123456789 o código sai da sub. Se for igual ele copia a Tabela 1 e cola na plan3.

Acredito que a dúvida seria para esse loop pois no código do JNEXCEL ele só verifica a célula "A2".

Obrigado.

Teleguiado.
E-mail: [email protected]

 
Postado : 09/05/2018 1:38 pm
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

kkkk vdd.
Na verdade o que ele quer é exatamente essa verificação das células conforme uma postagem anterior dele.
O For Next está verificando célula por célula se existe algum valor diferente de 123456789. Se não houver executa a rotina dele.

Mas eu acho que a dúvida dele nesse post é como essa verificação é feita. Até sugeri a ele que lesse um pouco sobre laço for next.

Só não levo muito jeito para explicação. kk

JNEXCEL, confirma pra gente se é isso mesmo...

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 09/05/2018 2:18 pm
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Seria, isso mesmo eu gostaria de entender kkk

eu fiz assim e deu certo:

If Range("A2") = 123456789 Then

mas assim NÃO DEU

If Range("F2:F12") = 123456789 Then

e nem assim

If Columns("C:C") = 123456789 Then

por qual motivo isso ocorreu?

 
Postado : 10/05/2018 4:58 am
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Não sou o melhor para explicar mas acredito que a verificação do if só é possível sendo feita célula por célula.
Por isso a necessidade do laço de repetição.

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 10/05/2018 8:37 am
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

entendi, muito obrigado pela atenção e explicação.

 
Postado : 10/05/2018 3:22 pm
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Por favor, como posso entender passo a passo esse código abaixo?

Eu preciso entender pois eu quero usar para uma outra planilha.

a planilha anexa é que deu origem ao código abaixo.

Sub Macro1()
   Dim ul As Long
   ul = Plan2.Range("A" & Rows.Count).End(xlUp).Row
   
    Sheets("BASE DE DADOS").Select
    For i = 2 To ul
    If Plan2.Range("A" & i).Value <> "123456789" Then   
    Exit Sub
    End If
    Next i
    
End Sub
 
Postado : 22/05/2018 9:56 am
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Jogue no editor de código para ficar mais legível...

Sub Macro1()
   Dim ul As Long  ' aqui você definiu a variável como long (long é uma variável que resulta em um número inteiro. Foi declarado como long pois uma linha do excel é um número inteiro).
   ul = Plan2.Range("A" & Rows.Count).End(xlUp).Row ' aqui você identificou qual é a ultima linha  preenchida da plan2 na coluna A. 
   
    Sheets("BASE DE DADOS").Select 'aqui você selecionou a planilha base de dados
    For i = 2 To ul ' aqui vocÊ está definindo um limite para um laço de repetição (nesse caso, vai da linha 2 até a utima linha preenchida. lembra do ul lá em cima?)
    If Plan2.Range("A" & i).Value <> "123456789" Then   ' aqui você está dizendo: se o valor de A2 (2 é o primeiro valor de i) é diferente de 123456789 então.... sendo assim , entende-se que i é uma variável.
    Exit Sub 'e aqui: .....termine a sub por aqui
    End If ' fim de condicional
    Next i  'aqui no next, ele faz o loop (A2 vira A3. depois vira A4. depois vira A5. até virar o valor da ultima linha preenchida (ul) . E sempre que muda, ele realiza a sua condicional novamente (loop). Logo:
'se o valor de A2 é diferente de 123456789 então....
'se o valor de A3 é diferente de 123456789 então....
'se o valor de A4 é diferente de 123456789 então....
'e assim por diante até a ultima linha  preenchida
End Sub ' fim da instrução

Ou seja, ele está fazendo uma verificação linha por linha na coluna A, para ver se o valor se trata de 123456789. Se não for, ele acaba a rotina.

Se alguem puder ajudar a explicar melhor, pois não sei explicar muito bem..

Seria melhor te explicar pontualmente. Onde exatamente está sua dúvida?...

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 22/05/2018 10:28 am
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Eu estou anexando um pequeno exemplo do que eu pretendo fazer.

Por favor, você poderia me explicar nesse exemplo?

eu tenho um código if, porém eu preciso alterar esse código IF e não estou conseguindo.

Muito obrigado

 
Postado : 22/05/2018 1:01 pm
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Se a célula for diferente de "MANOEL" Você quer :

1- deletar o valor da célula
2 - deletar linha interira
3- deletar todo conteúdo?

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 22/05/2018 1:09 pm
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

a forma que eu achei foi assim:

importar se todos os nomes da coluna A, a partir da célula A2 forem MANOEL,

se não for o excel vai deletar as todas as informações existentes a partir da célula A2

(tem que ser da célula A2, pois eu vou ter cabeçalho).

mas seria mas "GENIAL" se fosse assim:

se existir algum nome diferente de MANOEL na coluna A, a partir da célula A2 os dados não serão importados.

será que você consegue fazer isso (essa forma GENIAL)?

Por esse motivo que eu estou querendo entender mais do seu código para poder aplicar nessa planilha.

Muito obrigado.

 
Postado : 22/05/2018 1:48 pm
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Bem na verdade não tem nada demais nesse código. Mas segue:

Option Compare Text
Sub Importar_dados()
    Dim ul As Long
    ul = Plan1.Range("A" & Rows.Count).End(xlUp).Row
    If ul <= 1 Then
    ul = 2
    End If
    For i = 2 To ul
    If Plan1.Range("A" & i).Value <> "MANOEL" Then   ' nessa parte como eu faço para que o excel verifique se toda a coluna A possui o nome MANOEL
    Plan1.Range("A2:B" & ul).Clear            ' hoje o meu código verifica apenas a célula A2, eu preciso verificar toda a coluna
Mensagem:
    MsgBox "os dados não foram importados para o excel", vbCritical, "Erro"
    Exit Sub
    End If
    Next i
      
    With ActiveSheet.QueryTables.Add(Connection:= _
       "TEXT;C:ARQUIVOS VENDEDORESVENDEDORES E PRODUTOS.txt", Destination:=Range( _
        "$A$1"))
        .Name = "VENDEDORES E PRODUTOS"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65000
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = "#"
        .TextFileColumnDataTypes = Array(2, 2)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    
   
     End Sub

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 22/05/2018 2:26 pm
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Colega JNEXCEL, era exatamente isso o que queria?

Se não for, pode falar como deve ser...

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 23/05/2018 9:57 am
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Olá, bom dia! Eu fiz um teste aqui e não deu certo. :( o que será que eu estou fazendo de errado?

eu preciso deixar essa parte do código para dar certo?

Option Compare Text
 
Postado : 24/05/2018 5:11 am
Página 1 / 2