Notifications
Clear all

Macro apresenta erro qd limpa as células

16 Posts
2 Usuários
0 Reactions
3,763 Visualizações
(@clovismor)
Posts: 12
Eminent Member
Topic starter
 

Oi, amigos !!!
Estou com uma planilha de controle de materiais a qual fui fazendo com a ajuda de vários colegas do fórum. No momento a planilha está quase pronta, mas estou com um probleminha. Apesar de estar funcionando bem, ao limpar as células, aparecem alguns erros de VBA enquanto vou deletando os valores por se tratar de uma planilha mensal e ter que zerar todo início do MÊS..
A referida planilha consiste em controlar estoque de materiais diversos e a intenção é que o valor de saída de material na planilha SAÍDAS seja menor ou igual ao valor do ESTOQUE ATUAL da planilha Controle!!!
Espero que algum colega possa me ajudar, obrigado!!!
obs: se tiver jeito, pretendo usar nas versões 2003 e 2007.

 
Postado : 04/06/2012 10:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!!

Provavelmente você tem células bloqueadas, e macro tem que "saber" disso.
Existe tópicos em nossa base que trata de assuntos de usar a macro com células bloqueadas, favor usar a pesquisa do fórum!!
Leia as regras antes de postar!!

Nossas Regras:
viewtopic.php?f=7&t=203

Quesito REGRAS
Upload de arquivos
Ja temos mais de 1,5GB em arquivos aqui no Planilhando, e como não geramos $$$, temos que ser austeros no uso da banda e recursos, por isso, segue novas regras pra upload de arquivos:
-Tamanho máximo: 2Mb
-Formato obrigatório: .Zip - .rar - .ice

Comentários e Sugestões sobre as mudanças no link abaixo :
viewtopic.php?f=7&t=3148

Att

 
Postado : 04/06/2012 11:23 am
(@clovismor)
Posts: 12
Eminent Member
Topic starter
 

Olá Alexandre
Me desculpe por ter enviado o arquivo em formato excel, se tiver como editar minha postagem, vou corrigir este erro. Infelizmente não consegui encontrar nada sobre macros com céluas bloqueadas, pois sou leigo no assunto e se vc puder me indicar algum link ou me ensinar onde colocar os comandos, serei mui grato...
Obrigado....

 
Postado : 04/06/2012 3:07 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Poderia contar com mais detalhes o que acontece e que erro exatamente aparece, dê mais detalhes!!

Att

 
Postado : 04/06/2012 5:25 pm
(@clovismor)
Posts: 12
Eminent Member
Topic starter
 

OK, enquanto vou deletando as informações para fechar o mês, aparece estas mensagens:
Erro em tempo de execução "13":
Tipos incompatíveis
Fiz besteira no início dizendo que não gostaria de macro, se tivesse aceitado sua opinião e de outros feras, com certeza já teria finalizado meu trabalho
O Bloqueio das células são justamente para proteger as fórmulas.
Obrigado por enquanto
CLOVIS

 
Postado : 04/06/2012 6:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Clovis, então está havendo algum engano de minha parte....ou inda está faltando detalhes

...Eu deleto os dados, e não me gera erros!!

Eu fiz um pequeno teste em cada planilha (Guias).

Quando você diz deletar, é o fato de ir até uma determina Guia e em uma determinada célula e apertar a tecla Delete?

Att..

 
Postado : 04/06/2012 6:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Alexandre, primeiramente gostaria de tirar uma duvida, porque não consigo habilitar as macros neste seu arquivo ? Já adicionei "Lugar Confiavel", mas mesmo assim não deu certo, e o interessante é que cheguei a criar um outro arquivo para reproduzir o efeito e tambem não aparece opção de Habilitar as Macros.

Como minha experiência é mais no excel 2003, quando me deparo com alguns arquivos do 2007 apanho um pouco, e como ultimamente meus afazeres redobraram, ando com um pouco de dificuldade de tempo livre para me dedicar a procurar as razões, até seria interessante, se vocês que já utilizam o Excel 2007 a mais tempo pudesse criar um Tópico sobre estas questões em Biblioteca para uma consulta rapida, grato.

Agora quanto a questão do colega Clovis, eu acho que o mesmo está se referindo quando se seleciona um conjunto de celulas, ai sim teriámos um erro, pois a rotina está tratando sómente de uma seleção (Target.Row), se for isto, teste a rotina abaixo utilizando uma seleção maior de celulas :

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim sRanges
        
        If Target.Cells.Count < 1 Then Exit Sub
        
            MsgBox Target.Cells.Address
            
            sRanges = Target.Cells.Address(False, False)
            
            Sheets("Plan1").Range(sRanges).Value = ""
      
    End Sub

[]s

 
Postado : 04/06/2012 7:28 pm
(@clovismor)
Posts: 12
Eminent Member
Topic starter
 

Obrigado aos colegas Alexandre e Coutinho. Acho que o Coutinho tem razão, porque quando aparece os erros é justamente qdo seleciono várias células e aperto "delete". Só que agora meu Note deu problema no office e desinstalei e agora não estou conseguindo reinstalá-lo. Assim que estiver no meu local de trabalho a tarde, vou testá-lo.
Pergunto a vcs -onde devo inserir os comandos que o Coutinho me indicou? antes de toda macro???
Coltinho, tb tive um desses problemas com o excel 2007 e consegui resolver instalando um complemento chamado: "office2007sp2-kb953195-fullfile-pt-br" - se não me engano, peguei no site da Microsoft.
Por enquanto obrigado a todos!!!

 
Postado : 05/06/2012 5:49 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Mauro, na verdade o arquivo é do Clovis, de qualquer forma suas observações está realmente questionável.
Eu preciso me organizar também estou arrochado no tempo. :(

Clovis, o código que o Mauro postou (onde deixei escapar o detalhe de selecionar o intervalo e deletar), deve ser posto dentro Editor VB.

Veja a imagem!!

Att

 
Postado : 05/06/2012 11:32 am
(@clovismor)
Posts: 12
Eminent Member
Topic starter
 

Oi, Alexandre
Percebi que somente aparece este erro quando seleciono mais que uma célula na planilha de SAÍDAS onde está a macro. Nas demais planilhas, posso selecionar quantas células quiser e deletar os dados que não tem nenhum problema.
Erro em tempo de execução "13":
Tipos incompatíveis
BLZ?

 
Postado : 05/06/2012 12:29 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Clovis, aqui no serviço não temos o excel 2007, como pode ver ainda estou no serviço, estou tendo bem pouco tempo de sobra, vou ver se monto um exemplo no 2003 e depois eu posto.

Quanto ao erro acontecer somente na aba SAIDA é porque estamos utilizando o Evento (Worksheet_SelectionChange) associado somente a esta Aba, se quer que a mesma fique valendo para todas as abas devemos utilizar o Evento associado a Esta Pasta de Trabalho (WorkBook) .

[]s

 
Postado : 05/06/2012 2:18 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Clovis, está muito estranho pois, testei dessa forma onde deleto os intervalos e na de errado acontece!

Afinal qual é versão de Office?

Att

 
Postado : 05/06/2012 5:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Clovis, está muito estranho pois, testei dessa forma onde deleto os intervalos e na de errado acontece!

Afinal qual é versão de Office?

Att

Alexandre, o erro acontece quando você selecionar na Aba SAIDA as celulas de "A5:A112" e teclar "DELETE", isto devido a linha abaixo no Evento Worksheet_Change desta aba:
If Target.Value = "" Then Sheets("Saídas").Range("H" & Target.Row).Select

Ela se refere sómente a um endereço, se está utilizando o modelo que foi postado, o qual disse ser do Clovis e que eu não consegui habilitar as macros e não me dá mensagem tambem que as macros estão desabilitadas, ao selecionar as celulas e deletar não ocorrerá o erro devido as rotinas estarem desativadas.

[]s

 
Postado : 05/06/2012 8:02 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Clovis, precisamos que detalhe o que realmente está pretendendo, em suas rotinas você faz a verficação de qual é a última linha preenchida na Aba Controle :

Verifica a Última Linha Preenchida
UltimaLinha = Sheets("Controle").Cells(Cells.Rows.Count, 1).End(xlUp).Row

E, se for menor que 5 definimos à variável Ultimalinha como sendo 5 ( =5)
If UltimaLinha < 5 Then UltimaLinha = 5

Depois é utilizado "Target.Row", nesta instrução será definida sempre a primeira celula selecionada, independente se selecionarmos mais de uma celula, exemplificando, na Aba Saída, apague as rotinas que constam na mesma e cole a abaixo :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    MsgBox Target.Row
    
    MsgBox Target.Address
    
    MsgBox Target.Cells.Count
    
End Sub

Apos colar, posicione o cursor em cima da linha : Private Sub Worksheet_SelectionChange(ByVal Target As Range) e tecle "F9" a mesma ficará Marrom, volte para planilha e selecione uma celula qualquer, ao fazer isto abrirá a telado VBA na linha em que destacamos utilizando "F9", então vá teclando "F8" e a rotina será executada Passo a Passo cada vez que teclar F8 :
Então supondo que selecionou a Celula "A8" as mensagens serão :
Target.Row = 8 - porque selecionamos a Linha 8
e
Target.Address = $A$8 - porque selecionamos o Endereço (Range) A8
e
Target.Cells.Count = 1 - porque selecionamos somente uma (1) Linha

Agora se selecionar as Celulas "A8 até A10", as mensagens serão :
Target.Row = 8 porque selecionamos a Linha 8 - Row se refere sempre a primeira Linha selecionada
e
Target.Address = "$A$8:$A$10" porque selecionamos o Endereço (Range) A8 até A10.
e
Target.Cells.Count = 3 - porque selecionamos somente TRES (3) Linhas

Então se queremos definir um conjunto de celulas não podemos utilizar ROW neste seu caso.

Espero ter conseguido explicar, só falta você definir realmente qual a intensão.

[]s

 
Postado : 05/06/2012 8:34 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

As dicas do Mauro é mais que suficiente, mas por ventura caso ainda tenha problemas veja se te ajuda.

Dim QtdeEstoque As Integer

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i, UltimaLinha As Integer
    Dim rngCell As Range
    Application.EnableEvents = False
    UltimaLinha = Sheets("Controle").Cells(Cells.Rows.Count, 1).End(xlUp).Row
    If UltimaLinha < 5 Then UltimaLinha = 5
    If Not Intersect(Target, Range("G4:G49")) Is Nothing Then
        For Each rngCell In Intersect(Target, Range("G4:G49")).Cells
            For i = 5 To UltimaLinha
                If Sheets("Controle").Range("A" & i).Value = Me.Range("A" & rngCell.Row).Value Then
                    If rngCell.Value > QtdeEstoque Then
                        MsgBox "O Estoque Desse Produto só Tem " & QtdeEstoque & " Unidades! Digite uma Quantidade Menor do que a que há no Estoque.", vbCritical, "ESTOQUE INSUFICIENTE"
                        rngCell.ClearContents
                        rngCell.Select
                    End If
                End If
            Next
        Next rngCell
    End If
     
    Application.EnableEvents = True
End Sub
 
Postado : 06/06/2012 5:35 pm
Página 1 / 2