Notifications
Clear all

Ajuda com um exercico

10 Posts
2 Usuários
0 Reactions
2,408 Visualizações
(@lfado)
Posts: 9
Active Member
Topic starter
 

Olá,

Comecei a estudar VBA agora, pela internet. Ja tenho umas noções de programação por causa da faculdade (sei mexer no python).
Não to conseguindo fazer um exercico, alguem poderia me ajudar?
É o seguinte, Tenho que fazer um programa que ative Plan 2 usando Activate, e que depois selecionas as células B4:C7 com select.
Fiz o seguinte
Alt+f11 e abri o VBA,
Ai eu escrevi
Plan2.Activate
B4:C7.select
e fui em executar ai pediu pra eu dar um nome pra Macro e cria-la e ai surgiu em baixo
sub Macro1()
End sub
Ai eu apaguei o q escrevi em cima e escrevi dentro da macro
ai ficou assim:
sub Macro1()
Plan2.Activate
B4:C7.select
end sub

Mas quando mando executar aparece uma janela dizendo: Erro em tempo de execução "424":
O Objeto é obrigatório
e quando clico em depurar ele seleciona
B4:C7.select

Alguem me explica o erro, pois nao entendi, e como faço esse exercico?

att.

Lucas Fonseca

 
Postado : 07/08/2012 8:04 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Aparentemente o excel/vba, apesar de "ativar" a planilha mencionada, não "seleciona" a range pois não consegue definir em qual planilha.

Então seu codigo seria:

Sub Macro1()
Plan2.Activate
ActiveSheet.Range("B4:C7").Select
End Sub

 
Postado : 07/08/2012 8:49 am
(@lfado)
Posts: 9
Active Member
Topic starter
 

Nossa muito obrigado.

Você saberia como fazer um filtro? Tipo tenho uma tabela numa coluna tenho pdorutos, na outra fornecedores,categoria e na outra quantidade em estoque.
Quero fazer um filtro separado co tres opções de filtragem (podendo usar apenas uma, duas ou tres), fornecedor,categoria e quantidade em estoque, e ai ele imprimiria os produtos em acordo numa tabela abaixo.

Tentei criar no VBA cada condição mas acho q to escrevendo errado, e vi que ficaria inviavel ja q são muitas possibilidades.
Tipo uma das possibilidades seria:
OBS: I6 é onde ta o filtro por fornecedor.
If (Range("I6") = "Bob Construtos") Then
ActiveSheet.ListObjects("Tabela1").Range.AutoFilter Field:=2, Criteria1:= _
"Bob Construtor"
End If
Só q meu amigo falou que Activesheet Não vai procurar os produtos desse fornecedor.

Como faço?

 
Postado : 07/08/2012 9:44 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei o que seu amigo falor, mas activesheet não procura nada, simplesmente se refere a planilha ativa.
Criterios de probura e busca devem ser especificados.
Não sei tb qual excel utiliza mas pelo "ListObjects("Tabela1")" creio ser 2007 ou 2010 em uma planilha formatada como tabela. Como não estou utilizando nenhuma dessas versões segue como poderia ser na versão 2003:

Sub Macro1()
'Ativa planilha
Plan1.Activate
'atribui um valor à variavel
sel = Range("k1").Value
'Seleciona range utilizada
ActiveSheet.UsedRange.Select
'Inicia autofiltro
Selection.AutoFilter
'Fltra pela coluna 4 (field 4), usando criterio na celula K1
Selection.AutoFilter Field:=4, Criteria1:=sel
End Sub
 
Postado : 07/08/2012 11:16 am
(@lfado)
Posts: 9
Active Member
Topic starter
 

Muito obrigado pela ajuda anterior.

Eu posso escrever a seguinte sentença:
criterio1 = .Cells(6, 9).Value
Da seguinte maneira:
criterio1= range("I6")?

Umas duvidas pq tem o . antes do Cells? e o q é .value?

Att,

Lucas Fonseca

 
Postado : 09/08/2012 12:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite,

A instrução com um ponto antes, normalmente, usamos com um With:

With ActiveSheet
    criterio1 = .Cells(6, 9).Value
    criterio2 = .Cells(6, 10).Value
End With

Desta maneira não é necessário ficar repetindo o nome do objeto (ActiveSheet).
Se for colocado isoladamente, não vai funcionar.
Também é possível utilizar assim:

criterio1 = Cells(6, 9).Value
criterio1 = Range("I6").Value
criterio1 = [I6].Value

Se quiser omitir o "Value", também é possível pois é a propriedade padrão do objeto "Cells":

criterio1 = Cells(6, 9)
criterio1 = Range("I6")
criterio1 = [I6]

Eu, particularmente, prefiro não omitir, pois acho que o código fica mais claro.

Abraço

 
Postado : 09/08/2012 3:37 pm
(@lfado)
Posts: 9
Active Member
Topic starter
 

Vlw ajuda bastante

att,

Lucas Fonseca

 
Postado : 10/08/2012 7:14 am
(@lfado)
Posts: 9
Active Member
Topic starter
 

Mais uma ajuda,

to escrevendo um código pra fazer um filtro de uma tabela :produtos/fornecedor/categoria/quantidade/critico
No filtro tenho as possibilidadas: forncedor, categoria e quantidade.
Em quantidade a pessoa pode escolher "qualquer ", "> critico". "< criticos".
Estou com um problema aki, meu codigo funciona bem até eu escolher "> critico" ou "< critico". Nessa seituação ele nao imprime os produtos nessas condições numa tabela em baixo.

Segue abaixo a parte do código referente:

If quantidade = "" Or quantidade = "Qualquer" Then
.Cells(linhafiltro, "H") = .Cells(linhatabela, "B")
linhafiltro = linhafiltro + 1
If quantidade = "> critico" Then
If .Cells(linhatabela, "E") > .Cells(linhatabela, "F") and .Cells(linhafiltro, "H") = .Cells(linhatabela, "B")Then
linhafiltro = linhafiltro + 1
If quantidade = "< critico" Then
If .Cells(linhatabela, "E") < .Cells(linhatabela, "F") and .Cells(linhafiltro, "H") = .Cells(linhatabela, "B")then
linhafiltro = linhafiltro + 1

Alguem sabe onde esta o erro?

 
Postado : 10/08/2012 10:54 am
(@lfado)
Posts: 9
Active Member
Topic starter
 

desculpa escrevi o codigo errado o certo é este:

If quantidade = "" Or quantidade = "Qualquer" Then
.Cells(linhafiltro, "B") = .Cells(linhatabela, "H")
linhafiltro = linhafiltro + 1
End If
If quantidade = "> critico" And .Cells(linhatabela, "E") > .Cells(linhatabela, "F") Then
.Cells(linhafiltro, "B") = .Cells(linhatabela, "H")
linhafiltro = linhafiltro + 1
End If
If quantidade = "< critico" And .Cells(linhatabela, "E") < .Cells(linhatabela, "F") Then
.Cells(linhafiltro, "B") = .Cells(linhatabela, "H")
linhafiltro = linhafiltro + 1

 
Postado : 10/08/2012 10:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Parece a pergunta: "Onde está Wally??"
Sem saber qual o erro retornado, e como são e quais são os dados que estão sendo manipulados, é muito improvavel definir o que está errado.
Pelo descrito, a linha de codigo não há problema, então aparentement o problema está nos dados/manipulação

 
Postado : 10/08/2012 11:19 am