Notifications
Clear all

simplificar com loop

50 Posts
4 Usuários
0 Reactions
5,228 Visualizações
(@fazerbem)
Posts: 0
New Member
Topic starter
 

Boa Tarde

Teria como simplificar a macro abaixo pois vou tera mais linhas iguais.

Teria como colocar um loop ai ?

mudara: Pro1.Value , Label_Pro1, Label_Pro1A ....

Private Sub Pro1_Enter()

Sheets("Estoque").Activate

Dim intervalo As Range
Dim codigo As Integer
Set intervalo = Plan19.Range("B6:W605")
            
codigo = Pro1.Value
  Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
  Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
Label_Pro1.Caption = Pesquisa
Label_Pro1A.Caption = Pesquisa1

codigo = Pro2.Value
  Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
  Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
Label_Pro2.Caption = Pesquisa
Label_Pro2A.Caption = Pesquisa1

codigo = Pro3.Value
  Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
  Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
Label_Pro3.Caption = Pesquisa
Label_Pro3A.Caption = Pesquisa1

codigo = Pro4.Value
  Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
  Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
Label_Pro4.Caption = Pesquisa
Label_Pro4A.Caption = Pesquisa1

codigo = Pro5.Value
  Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
  Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
Label_Pro5.Caption = Pesquisa
Label_Pro5A.Caption = Pesquisa1

codigo = Pro6.Value
  Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
  Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
Label_Pro6.Caption = Pesquisa
Label_Pro6A.Caption = Pesquisa1

codigo = Pro7.Value
  Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
  Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
Label_Pro7.Caption = Pesquisa
Label_Pro7A.Caption = Pesquisa1

codigo = Pro8.Value
  Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
  Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
Label_Pro8.Caption = Pesquisa
Label_Pro8A.Caption = Pesquisa1

codigo = Pro8.Value
  Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
  Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
Label_Pro8.Caption = Pesquisa
Label_Pro8A.Caption = Pesquisa1






End Sub
 
Postado : 27/01/2017 11:21 am
(@skulden)
Posts: 0
New Member
 

Tem sim, tente desta forma:


Private Sub Pro1_Enter()

Sheets("Estoque").Activate

Dim i as Integer
Dim aux as Variant
Dim aux2 as Variant
Dim aux3 as Variant
Dim intervalo As Range
Dim codigo As Integer
Set intervalo = Plan19.Range("B6:W605")

For i = 1 to 8
  
   aux = "Pro" & i
   aux2 = "Label_" & aux
   aux3 = "Label_Pro" & aux & "A"

   codigo = aux.Value


   Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
  Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
  aux2.Caption = Pesquisa
  Label_Pro1A.Caption = Pesquisa1

Next i

 
Postado : 27/01/2017 11:37 am
(@fazerbem)
Posts: 0
New Member
Topic starter
 

ola Grato, deu erro aqui

codigo = aux.Value
o objeto e obrigatorio

 
Postado : 27/01/2017 11:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Segue minha sugestão:

Option Explicit

Private Sub Pro1_Enter()
Dim intervalo   As Range
Dim codigo      As Integer
Dim lin         As Long
Dim i           As Long

    Application.ScreenUpdating = False

    ThisWorkbook.Worksheets("Estoque").Activate
    
    Set intervalo = Plan19.Range("B6:W605")
    
    For i = 1 To 200 'vai do 1 ao 200
        codigo = Me.Controls("Pro" & i).Value
        lin = intervalo.Find(codigo, lookat:=1).Row
        Me.Controls("Label_Pro" & i).Caption = Plan19.Cells(lin, 4).Value
        Me.Controls("Label_Pro" & i & "A").Caption = Plan19.Cells(lin, 6).Value
    Next i
    
    Application.ScreenUpdating = True

End Sub

Qualquer coisa da o grito.
Abraço

 
Postado : 27/01/2017 11:46 am
(@fazerbem)
Posts: 0
New Member
Topic starter
 

deu este erro

Nao foi possivel encontrar o objeto especificado

Me.Controls("Label_Pro" & i & "A").Caption = Plan19.Cells(lin, 6).Value

 
Postado : 27/01/2017 11:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

fazerbem, a variável "i" está em qual valor?

 
Postado : 27/01/2017 12:00 pm
(@fazerbem)
Posts: 0
New Member
Topic starter
 

A variavel é uma numero dentro das TexBox do formulario, nao esta na planilha.

Na imagem

o quadrado 11 se chama Pro1
o Quadrado 12 se chama Pro2

A mesma coisa se vale as labels

 
Postado : 27/01/2017 12:06 pm
(@fazerbem)
Posts: 0
New Member
Topic starter
 

as labels nao, elas usan Vlook

 
Postado : 27/01/2017 12:09 pm
(@fazerbem)
Posts: 0
New Member
Topic starter
 

codigo = Proi.Value
Pesquisa = Application.WorksheetFunction.VLookup(codigo, intervalo, 4, False)
Pesquisa1 = Application.WorksheetFunction.VLookup(codigo, intervalo, 6, False)
Label_Pro1.Caption = Pesquisa
Label_ProiA.Caption = Pesquisa1

 
Postado : 27/01/2017 12:09 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fazerbem,

A sua utilizava VLoopUp para definir o valor da Pesquisa e Pesquisa1 para depois definir as labels com os valores das pesquisar...
Eu removi isso... Utilizei o método find()

Tem as labels Label_Prox e as labels Label_ProxA
O loop que eu adaptei faz de Label_Pro1 até Label_Pro200 e Label_Pro1A até Label_Pro200A

Você tem que ajustar pela quantidade de labels na linha onde inseri o comentário.
Quando deu o erro, a variável "i" estava em qual valor?

Qualquer coisa da o grito.
Abraço

 
Postado : 27/01/2017 12:14 pm
(@fazerbem)
Posts: 0
New Member
Topic starter
 

vou sair 30 minutos.

mas segue o codigo

so troquei a linha 6 pra 7

Private Sub Pro1_Enter()

'Sheets(D).s


Dim intervalo As Range
Dim codigo As Integer

Dim lin         As Long
Dim i           As Long
    Application.ScreenUpdating = False

'  Sheets("Estoque").Activate
   
   ThisWorkbook.Worksheets("Estoque").Activate

Set intervalo = Plan19.Range("B6:W605")

   For i = 1 To 200 'vai do 1 ao 200
        codigo = Me.Controls("Pro" & i).Value
        lin = intervalo.Find(codigo, lookat:=1).Row
        Me.Controls("Label_Pro" & i).Caption = Plan19.Cells(lin, 4).Value
        Me.Controls("Label_Pro" & i & "A").Caption = Plan19.Cells(lin, 7).Value
    Next i
    
    Application.ScreenUpdating = True







End Sub
 
Postado : 27/01/2017 12:18 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Na depuração do código, no momento do erro, qual o valor da variável "i" [3]

 
Postado : 27/01/2017 12:21 pm
(@fazerbem)
Posts: 0
New Member
Topic starter
 

Na depuração do código, no momento do erro, qual o valor da variável "i" [3]

Bernardo acho que foi falha aqui no formulario coloquei de 1 a 8 deu certo.

Pera ai ja te falo

 
Postado : 27/01/2017 12:23 pm
(@fazerbem)
Posts: 0
New Member
Topic starter
 

achei o erro

estava dando tipos incompatioveis, mas é porque propositalmente eu deixei duas imagens sem codigos, pra no futuro so ter que incluir o codigo.

coloquei de 1 a 52 e deu certo agora

Como fazer pra nao dar o erro se algum quadrado estiver sem codigo ?

 
Postado : 27/01/2017 12:35 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Logo no início insere isso:

on error resume next

Qualquer coisa da o grito.
Abraço

 
Postado : 27/01/2017 12:59 pm
Página 1 / 4