Ariane Posted February 12, 2021 at 12:01 PM Report Share #621320 Posted February 12, 2021 at 12:01 PM Olá tenho uma tarefa, de macro em Excel, para resolver que me ocupa a cabeça já há vários dias... Já fiz e refiz , até achei um código nesta plataforma que me auxiliou muito. Porém, estou com um problema em uma estrutura de repetição nesse código. Vou deixar aqui o exercício, bem como a minha tentativa , na esperança que alguém me possa direcionar no caminho, sinto que estou perto mas alguma coisa falha.. //Exercício Fazer uma macro que possa garantir o preenchimento automático de um dado específico na planilha. Esse dado, que será preenchido automaticamente, depende de outros dados específicos do preenchimento da planilha mas que estão correlacionados à ele. //Código feito Private Sub tbx2_Change() 'Dentro do campo anterior, do dado a ser preenchido automaticamente, comecei o código e chamei a macro relacionada que executará o programa principal. If cx1.Value = "Novo" Then 'Ele terá a opção de não ser "novo", por isso tem esse If. If cx2.Value = "PNM" Then 'Ele terá a opção de não ser "PNM", por isso tem esse If. If tbx2.Value = "001" Then 'Ele terá a opção de não ser "PNM", por isso tem esse If. Call Comparacao 'Chamando a macro End If End If End If End Sub //Macro Sub Comparacao() Dim L As Range For Each L In Range("D5:D100") 'D5:D100 será o tamanho da coluna que a estrutura For Each terá que ler If L.Value <> "001A" Then 'Estou com dificuldades para fazer a estrutura If, pois preciso garantir a fidelidade de que não entre novamente no mesmo If 'quando sair e entrar no formulário para novo cadastro, pois não poderá repetir os valores de preenchimento automático (Valores 'para preenchimento automático serão: 001A, 002A, 003A... UserForm1.tbx3.Value = "001A" ElseIf L.Value <> 002A Then UserForm1.tbx3.Value = "002A" ElseIf L.Value <> 003A Then UserForm1.tbx3.Value = "003A" ElseIf L.Value <>"004A" Then UserForm1.tbx3.Value = "004A" Else: UserForm1.tbx3.Value = "001A" End If Exit Sub Next End Sub //Dificuldades encontrada: Toda que entro no formulário para o preenchimento, o dado a ser preenchido automaticamente, é preenchido com valor repetido. Pois como a estrutura de repetição lê as linhas em vazio ela interpretará como valor diferente. Atenciosamente, Ariane. Fico no aguardo, de uma possível ajuda. Obrigada! Link to comment Share on other sites More sharing options...
manuel antonio Posted May 22, 2022 at 01:12 AM Report Share #625987 Posted May 22, 2022 at 01:12 AM Boa noite. Acho que o teu problema está mal colocado e não deixa saber exatamente o que pretendes. Em 12/02/2021 às 12:01, Ariane disse: //Código feito Private Sub tbx2_Change() 'Dentro do campo anterior, do dado a ser preenchido automaticamente, comecei o código e chamei a macro relacionada que executará o programa principal. If cx1.Value = "Novo" Then 'Ele terá a opção de não ser "novo", por isso tem esse If. If cx2.Value = "PNM" Then 'Ele terá a opção de não ser "PNM", por isso tem esse If. If tbx2.Value = "001" Then 'Ele terá a opção de não ser "PNM", por isso tem esse If. Call Comparacao 'Chamando a macro End If End If End If End Sub Nesta parte do código que presumo inclua 3 Caixas de texto (TextBox), a sub Comparação é chamada se as tres condições se verificarem em simultâneo? Se for isso deves escrever o código desta forma: If cx1.Value = "Novo" and cx2.value = "PNM" and tbx2.Value = "001" Then Call Comparacao End If Em 12/02/2021 às 12:01, Ariane disse: Dim L As Range For Each L In Range("D5:D100") 'D5:D100 será o tamanho da coluna que a estrutura For Each terá que ler If L.Value <> "001A" Then 'Estou com dificuldades para fazer a estrutura If, pois preciso garantir a fidelidade de que não entre novamente no mesmo If 'quando sair e entrar no formulário para novo cadastro, pois não poderá repetir os valores de preenchimento automático (Valores 'para preenchimento automático serão: 001A, 002A, 003A... UserForm1.tbx3.Value = "001A" ElseIf L.Value <> 002A Then UserForm1.tbx3.Value = "002A" ElseIf L.Value <> 003A Then UserForm1.tbx3.Value = "003A" ElseIf L.Value <>"004A" Then UserForm1.tbx3.Value = "004A" Else: UserForm1.tbx3.Value = "001A" End If Exit Sub Next Nesta parte do código tens que rever bem as condições, pois a variável L.Value pode assumir vários valores nas condições que colocas: <>001A, pode ser 002A, 003A, 004A <>002A, pode ser 001A, 003A, 004A Na primeira condição <> 001A, o código vai colocar tudo como 001A e deixa de existir 002A, 003A e 004A, certo? Revê isso bem. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now