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
#25615
Galera, bom dia.

Desenvolvi uma planilha, separei em módulos, cada um agrupando funcionalidades por características similares.
A questão é a seguinte: Não quero que o usuário possa acessar as Subs e Functions, pensei em colocar como Private porém, quero que macros (Subs) internas possam acessar.

Códigos de exemplo ilustrativo abaixo:

Código acessado pelo usuário
Código: Selecionar todos
Option Explicit

Sub Acesso()
    Call Rotina
End Sub
Código interno
Código: Selecionar todos
Option Explicit

Private Sub Rotina()
    MsgBox "acessou"
End Sub
A chamada Call dá erro, como posso resolver?
#25616
Gilbert
Bom dia,

Amigo, existe uns caras feras aqui no Forum, mas a principio acredito que não seja possível fazer o que deseja... O único bloqueio de acesso que tenho conhecimento é para o VBAProject e este bloqueia toda a tua estrutura, a questão da Sub ser Private ou Public é apenas para controle das Classes, ou seja, se você declara uma Sub como Private não pode acessar nem ela nem as variáveis que nela contém por outra Classe, foi este o motivo da chamada Call ter dado erro... Apenas para teste, altere a Private Sub Rotina() para Public Sub Rotina() e verá que o Call funcionará corretamente...

Resumindo, Private e Public Sub não é para bloqueio de acesso do usuário final, serve como um controlador para definição das Classes...
#25617
Galera, já encontrei a solução no site http://wellsr.com/vba/2015/excel/3-ways ... er-module/

Seguem os códigos de exemplo que criei baseado na explicação deste site, por módulo

Module1
Código: Selecionar todos
Option Explicit

Private Sub PrivateCallDemo1()
    Application.Run "Module2.HelloWorld1"
End Sub

Private Sub PrivateCallDemo2()
    Call Module3.HelloWorld2
End Sub

Private Sub PrivateCallDemo3()
    Call Module4.HelloWorld3
End Sub
Module2
Código: Selecionar todos
Option Explicit

Private Sub HelloWorld1()
    MsgBox "Hello World 1", , "wellsr.com"
End Sub
Module3
Código: Selecionar todos
Option Explicit
Option Private Module

Public Sub HelloWorld2()
    MsgBox "Hello World 2", , "wellsr.com "
End Sub
Module4
Código: Selecionar todos
Option Explicit

Public Sub HelloWorld3(Optional byDummy As Byte)
'Module 1
    MsgBox "Hello World 3", , "wellsr.com "
End Sub
Alguém sabe dizer as vantagens e desvantagens de cada um dos métodos Application.Run, Option Private Module e (Optional byDummy As Byte) ?

E, conforme mencionado pelo wesleyribeiro123, eu já havia protegido com senha no VBAProject mas, as macros eram acessadas pelo usuário usando Alt + F8, o que eu queria era impedir este acesso direto. Agora está resolvido, o acesso é somente via botão ou por macro publica.
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