Notifications
Clear all

Chamar determinada MACRO

21 Posts
4 Usuários
0 Reactions
3,488 Visualizações
pfarias
(@pfarias)
Posts: 265
Reputable Member
Topic starter
 

Olá pessoal!

Minha dúvida acredito que seja simples.

Eu criei um userForm que ao abri-lo, ele da um CALL para um determinada macro que executou ela.
por exemplo:

Sub Macro01()
UserForm1.Show
Msgbox "OK"
End Sub
Public Sub UserForm_Activate()
Textbox1.txt = "Teste"
Call Macro01
End Sub

Até ai tudo bem.

mas só que eu não quero que seja determinada macro que execute após a abertura desse UserForm. A macro varia.
As vezes é Macro01, outras Macro02.

Quero que continue o Formulario aberto, e executando a macro junto com ele.

Existe alguma forma de eu escrever algo do tipo?

Public Sub UserForm_Activate()
Textbox1.txt = "Teste"
Call VOLTAR_PARA_MACRO_ATIVA
End Sub

Pietro Farias

Se foi resolvido suas dúvidas, lembre se de marcar o tópico como RESOLVIDO.

ANALISTA X

 
Postado : 11/08/2014 8:33 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Se as macros variam, você pode usar um botão ou combox para selecionar e acionar as macros.

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 11/08/2014 8:59 am
pfarias
(@pfarias)
Posts: 265
Reputable Member
Topic starter
 

Existe alguma forma em que eu poso criar uma variavel com o nome da atual macro, e publica ela por todo projeto?

MacroAtual=Macro01

Ai quando abrisse o UserForm poderia fazer algo do tipo:

Call MacroAtual

Pietro Farias

Se foi resolvido suas dúvidas, lembre se de marcar o tópico como RESOLVIDO.

ANALISTA X

 
Postado : 11/08/2014 9:23 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

you are overcomplicating . . .

Não vai colocar nomes de macros em variáveis, pelamor...
Determine qual a lógica das condições que as distinguem, e codifique oras, por exemplo:
if second(now()) = 30 then call macro1 else call macro2

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 11/08/2014 9:50 am
(@edcronos)
Posts: 1006
Noble Member
 

não sei se entendi,
mas colocar macros em variáveis e executa-las foi praticamente meu inicio no excel
mac6="nome da macro"
Application.Run mac6

tinha até feito uma useform com caixas de textos onde eu digitava os nomes da macros que eu queria executar em sequencia

Private Sub Exec_macros_Click()


    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    mac1 = Macro1.Value
    mac2 = Macro2.Value
    mac3 = Macro3.Value
    mac4 = Macro4.Value
    mac5 = Macro5.Value
    mac6 = Macro6.Value

    If mac1 <> "" Then Application.Run mac1: If LoopM = True And mac6 <> "" Then Application.Run mac6
    If mac2 <> "" Then Application.Run mac2: If LoopM = True And mac6 <> "" Then Application.Run mac6
    If mac3 <> "" Then Application.Run mac3: If LoopM = True And mac6 <> "" Then Application.Run mac6
    If mac4 <> "" Then Application.Run mac4: If LoopM = True And mac6 <> "" Then Application.Run mac6
    If mac5 <> "" Then Application.Run mac5: If LoopM = True And mac6 <> "" Then Application.Run mac6
    If LoopM = False And mac6 <> "" Then Application.Run mac6

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
   
End Sub

isso se eu entendi né...

Eu queria aprender a colocar Variáveis dentro de variáveis.

até

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 11/08/2014 1:26 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Eu queria aprender a colocar Variáveis dentro de variáveis.

Cumékié???

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 11/08/2014 2:07 pm
(@edcronos)
Posts: 1006
Noble Member
 

eu já fiz essa pergunta no forum, mas parece que somente é possível com modulo de classe

é para chamar varias variáveis a parti de uma só
definir valores e usar o valor

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 11/08/2014 2:36 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Não lembrava desse tópico, mas não podia deixar passar:

Variáveis dentro de variáveis

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 11/08/2014 2:50 pm
(@edcronos)
Posts: 1006
Noble Member
 

tbm não é para tanto né...

bem imagino que vc usa loops com objetos de userform
basicamente é quase isso que eu queria.

for n=1 to 20
var="var" & n
me.controls(var)...

em vez de chamar cada uma das 20 variaveis dentro do loop usaria apenas uma

bem, oq pensei é mais complexo que isso...

mas foi uma maneira simples que achei de explicar

att

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 11/08/2014 3:14 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tem razão, recurso antigo que é muito usado para disparar macro de um arquivo quando vc está rodando código de outro....
usar o Application.Run, apesar de limitado e complicado para passar parâmetros, ele é uma boa alternativa para usar nomes de macros dentro de variáveis.

FF

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 12/08/2014 8:05 am
(@edcronos)
Posts: 1006
Noble Member
 

fernando , creio que no vba existem recursos que pelo pouco uso são esquecidos ou ignorados pelos mais experientes.

Eu tinha feito perguntas sobre Application.Run,
tudo bem que não sabia o nome e nem como perguntar, mas fui totalmente ignorado nos foruns.

como já tinha programado em basic na infância, lembrava de alguns comandos como o RUM que executava os programas
e fiz um monte de testes até achar a sintaxe correta.
de inicio eu usei para escrever os nomes das macros e setores nas células da planilha para fazer a execução

acho que por mais limitada e idiota que uma funcionalidade pareça ter
não se deve ignorar totalmente suas possibilidades de uso.

E tbm acho que a capacidade de uma ferramenta,
e de recursos disponíveis se tornar algo utilizável e interessante está apenas na criatividade e conhecimentos práticos de que as utiliza.
"E fora do vba pode se tornar até uma fonte de lucros"

assim como usar uma variáveis dentro de outra,
alguns pode considerar idiota o uso, seria como ter uma casa dentro de outra
mas creio que depende do ponto de vista e capacidade de imaginação de quem olha uma ideia.
Exemplo... um prédio de apartamentos, pode ser considerado uma casa enorme com um monte de casas menores dentro...

No exemplo do gtsalikis, eu imagino um ônibus de 2 andares para caber mais passageiros, "algo que já existe"
sendo que a capacidade funcional e estética está apenas nos recursos e na capacidade de quem coloca a ideia em pratica ... "mas a ideia continua sendo valida"

até...

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 12/08/2014 10:53 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Eu já usei muito o Application.Run, e se não respondi seu tópico é pq nem sempre estou no forum. Pode ver que minha participação não é diária desde qdo abrimos o portal.
Eu apareço, respondo por umas semanas, depois eu sumo por uns meses. E de fato nem todo mundo conhece o Application.run...

Eu mesmo só indico usá-lo se for exclusivamente para reodar rotinas VBA de outros arquivos. Mesmo assim, com muito cuidado na passagem de argumentos (principalmente objetos)...
Qualquer uso diferente desse pode ser contornado com uma lógica melhorada. Até pq, pensa... se vc costumar usar o recurso Debug/Compilar, verá que o próprio VBE valida a sintaxe do seu código permitindo rodar ou não. Quando vc usa Call, por exemplo, e a rotina existe, o VBA compila e o código funciona. Se vc usa Call e a rotina não existe, pode ver que o VBE não compila. Pq ele entende que a rotina devia existir e não existe.

Por outro lado, ao usar o Application.Run e passar o nome da macro via parâmetro (ou seja, com aspas, ou com variáveis), o compilador não enxerga esse texto. Vai compilar sempre. E isso pode incorrer em error durante a execução. Portanto, sim sempre existe uma razão boa para certos recursos não serem indicados. Eu quando indico, procuro indicar a melhor opção, e vou dizer, se eu entendesse que a melhor solução é o Application.Run, eu indicaria. Mas ainda penso que, relevando a qualidade do código, as boas práticas da programação, e tudo mais que já falamos, eu nunca uso o Run para rotinas do mesmo arquivo. Pois o PDM neste caso sobe !!

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 12/08/2014 11:32 am
(@edcronos)
Posts: 1006
Noble Member
 

quando eu tive a duvida não conhecia esse fórum ainda.

mas não vamos voltar a velha discussão sobre possibilidades de erros por uso de comando ou de técnicas né,
"um prédio tem mais possibilidades de quedas que uma casa normal né, no entanto casas no brasil sem terremotos caem mais que prédios no japão"
então tudo depende de como cada um é construido

att

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 12/08/2014 12:16 pm
(@edcronos)
Posts: 1006
Noble Member
 

Fernando vc falou que é algo complicado passa argumentos com Application.Run

bem...
me veio uma ideia diferente,

Sub Teste()
Call DefineArray(2, "CresArray")
End Sub


Sub DefineArray(ByVal setor As Variant, ByVal NomeMacro As String)
    Call SetorL(setor)
  
    Li = Cells(Li - 1, Ci).End(xlDown).row - 1
    Lf = Cells(Rows.Count, Ci).End(xlUp).row + 1

    ColunO = Range(Ti & Li, Cf & Lf).Value2
    
    Application.Run NomeMacro, ColunO
    
    Range(Ti & Li, Cf & Lf).Value2 = ColunO
    
End Sub

funcionou "nem sabia que dava pra usar assim" :D << carinha feio hem
mas...
quero perguntar que tipo de problemas pode dar com Application.Run.

Ps. isso de ByVal e ByRef se não tomar cuidado vida uma bola de neve
"uma macro chama a outra que chama outra...", a gente fica indeciso se quebra o ciclo ou adiciona mais funcionalidades.

att.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 13/08/2014 2:32 pm
(@edcronos)
Posts: 1006
Noble Member
 

Fernando :
ao usar o Application.Run e "passar o nome da macro via parâmetro" (ou seja, com aspas, ou com variáveis), o compilador não enxerga esse texto. Vai compilar sempre.

Não entendi essa parte.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 13/08/2014 2:45 pm
Página 1 / 2