Notifications
Clear all

como usar macro pra executar função.

13 Posts
3 Usuários
0 Reactions
2,206 Visualizações
(@xman2000)
Posts: 178
Estimable Member
Topic starter
 

Olá Colegas!

desculpem minha ignorância, :oops:
pesquisei na web e nao achei.
grato.

desejo saber como usar uma macro pra executar (chamar) uma função.
como seria a expressão?

eu já usei:

sub macro1-Click()
nomeDaFunção (argumentos)
end sub.

 
Postado : 14/07/2015 3:52 pm
(@edcronos)
Posts: 1006
Noble Member
 

imagina essa função

Public Function Soma_LetraCol(ByVal letra_Coluna As String, valor As Long) As String
    Dim CLx As String
    Col_soma = Cells(1, letra_Coluna).Column + valor
    CLx = Cells(1, Col_soma).Address
    Soma_LetraCol = Mid(CLx, InStr(CLx, "$") + 1, InStr(2, CLx, "$") - 2)
End Function

no caso ela incrementa letra A+1=B

if Soma_LetraCol("A",1)="B" then

a função sempre retorna um valor então vc não pode usar ela separadamente para executar uma ação

coluna = Soma_LetraCol("A",1)
Range(coluna & 2)="Letra B"
Range(Soma_LetraCol("A",1) & 2)="Letra B"

se vc quer usar para executar açõe com valores de referencia tem que usar macros comuns e adicionar a referencia
tipo essa

Sub FormulaS(ByVal AtivDesativ As Boolean)
    Inicio
    'Call Copia_SetorO("formula")
    Call SetorL("formula")
    If AtivDesativ = True Then
        Range(Ci & 10).Copy
        Range(Ci & Li + 1000, Cf & Lf).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Else
        Range(Ci & Li, Cf & Lf).ClearContents
    End If
    Final
End Sub

no caso se chama
FormulaS true
ou
call FormulaS( true )
ou até uma variavel com verdadeiro ou falço no lugar de true

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 : 14/07/2015 4:59 pm
(@xman2000)
Posts: 178
Estimable Member
Topic starter
 

Oi Edcronos!
valeu a ajuda, mas ainda nao consegui.

preciso de um exemplo tipo o que postei no inicio.
existe uma função de nome ---Public Function Soma_LetraCol(ByVal letra_Coluna As String, valor As Long) As String
aí eu quero que a Macro1 execute essa função.
o que eu preciso colocar dentro da Macro1 pra ela executar a função?
o quanto mais sucinto o codigo melhor.
abraço.

 
Postado : 14/07/2015 5:50 pm
(@edcronos)
Posts: 1006
Noble Member
 

para vc entender coloque a função que postei e faça uma macro

sub eddd()

msgbox Soma_LetraCol("A",10)

end sub

é a mesma coisa que em uma celula do excel
=Soma_LetraCol("A",10)

a função retorna valores,
ela pode executar algumas ações tbm mas não em celulas

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 : 14/07/2015 6:01 pm
(@xman2000)
Posts: 178
Estimable Member
Topic starter
 

Oi Edcronos!

o resultado foi a letra "K" numa messagebox.
mas nao entendi por que esse resultado.
eu quero o resultado seja exibido dentro de uma ListBox.

eu anexo aqui o arquivo e o codigo
--------------------------------------------------------------------

Sub Eddd()

MsgBox Soma_LetraCol("A", 10)

With Worksheets("Plan1")
Worksheets("Plan1").ListBox1.AddItem Soma_LetraCol("A", 10)
End With

'ListBox1.AddItem Soma_LetraCol("A", 10)

End Sub
--------------------------------------------------------------
exibe o erro 438: "O objeto nao aceita esta propriedade ou método"

 
Postado : 14/07/2015 6:32 pm
(@edcronos)
Posts: 1006
Noble Member
 

acho que aí é em questão na propriedade do objeto
não sou nada bom com controles de formulários em planilha
se fosse em um userform até poderia ajudar

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 : 14/07/2015 7:15 pm
(@xman2000)
Posts: 178
Estimable Member
Topic starter
 

Valeu Edcronos!

Colegas, aguardo ajuda. Grato.

 
Postado : 14/07/2015 7:23 pm
(@edcronos)
Posts: 1006
Noble Member
 

na planilha fica assim "totalmente diferente de um useform"
troque caixalist2 pelo nome da sua caixa de listagem

Sub Eddd()

 With Sheets("plan1").Shapes("caixalist2").ControlFormat
        .RemoveAllItems

letra = "A"

For n = 0 To 10
.AddItem Soma_LetraCol(letra, n)
Next
End With

end sub

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 : 14/07/2015 7:27 pm
(@xman2000)
Posts: 178
Estimable Member
Topic starter
 

Olá Edcronos, deu erro.
anexo aqui o arquivo com o erro.
abraço.
--------------------------------
tipo incompativel de argumento by ref.
o erro aparece na letra "n"

.AddItem Soma_LetraCol(letra, n)

 
Postado : 14/07/2015 8:54 pm
(@edcronos)
Posts: 1006
Noble Member
 

coloque esse texto em vermelho na função

Public Function Soma_LetraCol(ByVal letra_Coluna As String, Byval valor As Long) As String

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 : 14/07/2015 8:58 pm
(@xman2000)
Posts: 178
Estimable Member
Topic starter
 

Oá EdCronos! Fera Man!

funcionou perfeitamente!
agora vou tentar adaptar pro meu Visualizador de Arquivos (imagens).
quando eu testar retorno neste topico.
no outro topico o Gere tá me ajudando, mas se vc quiser ajudar tbm fico imensamente grato.
abraço.

 
Postado : 14/07/2015 9:07 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ja esta um pouco tarde e ja estou me recolhendo, e apesar de ter resolvido, não vi seu modelo, se der amanhã dou uma olhada, e nem vou utilizar as instruções que estao nos posts anteriores, mas só para exemplificar como poderia chamar uma UDF - função definida pelo usuário através de outra macro :

Supondo a Function abaixo, se digitada na celula, retorna o nome da aba :

Function NomeSheet() As String
    NomeSheet = ThisWorkbook.Name
End Function

Para chama-la dentro de uma outra macro, podemos utilizar :

Sub Test2()

    MsgBox Application.Run("NomeSheet")

End Sub

É um exemplo bem simples, só para ilustrar uma das formas que podemos efetur a chamada a uma function.

[]s

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

 
Postado : 14/07/2015 9:45 pm
(@xman2000)
Posts: 178
Estimable Member
Topic starter
 

Olá Mauro Coutinho,
edit: 1o depois de agradecer, quero dizer que tem de listar os valores numa Listbox.
MessegeBox nao serve.
favor use o outro topico que abri, que é pra usar essa tecnica pra listar MUSICAS numa listbox.
eu tentei usar a tecnica do Edcronos e não consegui.
Favor baixe os modelos do outro topico e poste lá.
grato!!!
abraço.

 
Postado : 14/07/2015 10:09 pm