Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por erickhenrique
Posts
#22204
Senhores,

Minhas Sheets e WorkBook são protegidos por senha, com acesso simultâneo compartilhado.
Em determinada parte do código, desejo desativar alguns objetos IMAGE, caso o auto filtro esteja sendo aplicado à planilha...
Quando a Sheet encontra-se desbloqueada, o código não apresenta erro. Como posso resolver isso visto que não posso desbloquear a Sheet pois teria que remover o acesso simultâneo para os demais utilizadores?

Segue o código:

Dim rng As Range
Set rng = ActiveSheet.AutoFilter.Range

If rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 1 = 50 Then
ActiveSheet.Shapes.Range(Array("Image1", "Image2", "Image3")).Select
With Selection
.Enabled = True
End With
Else
ActiveSheet.Shapes.Range(Array("Image1", "Image2", "Image3")).Select
With Selection
.Enabled = False
End With
End If
Por osvaldomp
#22207
Experimente após inserir a linha em vermelho abaixo.
...
Set rng = ActiveSheet.AutoFilter.Range
ActiveSheet.Protect "SuaSenha", UserInterfaceOnly:=True
If rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 1 = 50 Then
...
Por erickhenrique
Posts
#22208
Prezado Osvaldo,

Obrigado pela atenção.
Implementei sua sugestão e funcionou enquanto a SHEET e o WorkBook estão bloqueados. Todavia, quando eu COMPARTILHO A PASTA DE TRABALHO, ao executar o código, apresenta Erro em tempo de execução 1004: ERRO DE DEFINIÇÃO DE APLICATIVO OU DE DEFINIÇÃO DE OBJETO.

Segue o código:

Private Sub Worksheet_Calculate()
Dim rng As Range

Set rng = ActiveSheet.AutoFilter.Range

ActiveSheet.Protect "sgqcalibracao", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True, AllowUsingPivotTables:=True

If rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 1 = 50 Then

If Shapes.Range("Image1").Visible = False Then
ActiveSheet.Shapes.Range(Array("Image1", "Image2", "Image3")).Visible = True
End If

ElseIf Shapes.Range("Image1").Visible = True Then

ActiveSheet.Shapes.Range(Array("Image1", "Image2", "Image3")).Visible = False

End If
End Sub
Por osvaldomp
#22209
Olá, Henrique.

A mensagem de erro é acompanhada pelo botão "Depurar"? Se sim, ao clicar nele, qual a linha do código que fica destacada em amarelo?
Por osvaldomp
#22212
Talvez estejam desativados em decorrência do compartilhamento do arquivo.

Vi que você acrescentou alguns parâmetros ao comando que eu sugeri. Experimente remover os parâmetros do comando e marque aqueles parâmetros na Caixa de Diálogo que é exibida ao proteger a planilha.
Por erickhenrique
Posts
#22226
Prezado Osvaldo, bom dia

Foi necessário incluir os parâmetro de AUTO FILTRO e CENÁRIOS para que estas funções permaneçam disponíveis ao usuário, MESMO DEIXANDO HABITADO NO MOMENTO DE BLOQUEAR A SHEET. Isso se fez necessário pois a linha de código que você sugeriu desabilitou o Auto Filtro...

Ao remover estes parâmetros, eu não consigo aplicar o Auto Filtro na Sheet.

Sim, o fato de o botão DEPURAR ficar desabilitado é que a planilha está compartilhada.

Está travando na linha ActiveSheet.Protect "sgqcalibracao", UserInterfaceOnly:=True, descobri fazendo o que segue:

MsgBox "1"
Dim rng As Range
MsgBox "2"
Set rng = ActiveSheet.AutoFilter.Range
MsgBox "3"
ActiveSheet.Protect "sgqcalibracao", UserInterfaceOnly:=True
MsgBox "4"
If rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 1 = 50 Then
MsgBox "5"
If Shapes.Range("Image1").Visible = False Then
MsgBox "6"
ActiveSheet.Shapes.Range(Array("Image1", "Image2", "Image3")).Visible = True
MsgBox "7"
End If
MsgBox "8"
ElseIf Shapes.Range("Image1").Visible = True Then
MsgBox "9"
ActiveSheet.Shapes.Range(Array("Image1", "Image2", "Image3")).Visible = False
MsgBox "10"
End If
MsgBox "11"

Exibiu o MSGBOX "3" e APRESENTOU ERRO!
Por osvaldomp
#22246
Olá, Henrique.
Não sei se você já tentou este arranjo: colocar os comandos Unprotect e Protect, este com os parâmetros. Algo assim:

Dim rng As Range
ActiveSheet.Unprotect "sgqcalibracao"
Set rng = ActiveSheet.AutoFilter.Range
...
...
End If
ActiveSheet.Protect "sgqcalibracao", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True, AllowUsingPivotTables:=True

End Sub
Por erickhenrique
Posts
#22280
Osvaldo, boa noite

Continua apresentando erro 1004 "Em tempo de execução",

Pelo que estou percebendo, o comando UnProtect não pode ser executado quando a pasta de trabalho está compartilhada.

Estou anexando o arquivo Excel para testes. A sheet e a pasta estão protegidas e a senha é "" (em braco, vazio).
Após aplicar o Filtro, clicar no "Botão 1".

Obrigado pela atenção.
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por alexandrevba
Avatar
#22339
Boa noite!!

Qual versão do office você está usando?

Independente da versão, leia o artigo abaixo:
https://support.office.com/en-us/articl ... P010342985
Write, record, change, view, or assign macros

You can run existing macros that don't access unavailable features. You can also record shared workbook operations into a macro stored in another nonshared workbook.
Você não vai conseguir acessar alguns recursos.

Att
Por erickhenrique
Posts
#22356
Caro Alexandre, bom dia

Obrigado pelo esclarecimento. Conteúdo com explicações rápidas e diretas!

Eu estou me utilizando do código abaixo para identificar se todos os meus registros (10 registros neste caso) estão sendo exibidos. Caso sim, o AUTO FILTRO não está aplicado. Caso não, o AUTO FILTO foi aplicado.

If rng.Columns(4).SpecialCells(xlCellTypeVisible).Count - 1 = 10 Then

Conhece alguma outra forma de se certificar sobre a aplicação do AUTO FILTRO numa sheet, que possa ser executada numa Pasta Compartilhada? :roll:

Obrigado pela atenção!
Avatar do usuário
Por alexandrevba
Avatar
#22360
Bom dia!!

Conforme o artigo da própria microsoft e segundo alguns especialistas da ferramenta, o ideal seria ou abandonar o recurso de compartilhamento para casos com macros ou importar e exportar essas informações para outro arquivo.
Tempo atrás eu presei fazer algo assim:
Para evitar uma gama de problemas e visto que a versão que eu usava no trabalho é a standard (não vem com access ou muito mais).

Eu tive que criar varias guias onde as mesma transferiam para um único arquivo os dados.
Talvez nem tudo precise ficar no arquivo compartilhado.

Att
Por erickhenrique
Posts
#22399
Pessoal, bom dia

Como a quantidade de registros por Sheet é fixa, resolvi o problema utilizando a função SUBTOTAL(3;intervalo de células). Caso o SUBTOTAL for diferente da quantidade de registros, o AUTO FILTRO foi aplicado. 8-)

Obrigado pela atenção
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord