Avatar billede jath08ac Forsker
13. december 2017 - 16:16 Der er 14 kommentarer

Kald en private sub fra et modul til et andet modul

Hej,
I mit modul (kaldet SumFun) har jeg en private sub sumifRegnskabFunction()
I mit andet modul (kaldet modCallBack) ønsker jeg at kalde til min private sub

Hvordan gør jeg dette, har prøvet med nedenstående kode, men kan ikke få det til at fungerer.

Sub VisRegnskabUNoterCallBack (cintrol as IRibbonControl)
Application.Run "SumFun", sumifRegnskabFunction
End sub

Hvad gør jeg forkert?
Avatar billede store-morten Ekspert
13. december 2017 - 16:33 #1
Prøv:
Call SumFun
Avatar billede Sitestory Mester
13. december 2017 - 19:03 #2
Hvis det kan lade sig gøre, er det (eller burde være) en bug. Fidusen ved at deklarere noget "private" er netop, at andre moduler, userforms og lignende ikke kan tilgå det (fx for at indbygge sikkerhed).

Hvis du undlader at deklarere din procedure/funktion for private, kan du kalde den fra et andet modul med Modulnavn.Procedurenavn.
Avatar billede jath08ac Forsker
13. december 2017 - 20:13 #3
Årsagen til at jeg ønsker at bruge Private sub er, at brugeren ikke skal kunne se mine VBA koder i Marko oversigten under fanen udvikler
Avatar billede Sitestory Mester
13. december 2017 - 20:34 #4
Tynd sikkerhed - brugeren kan fx bare taste ALT+F11 for at se koden. I stedet kan du beskytte koden med password. Det er dog heller ikke sikkert - der er masser af programmer, der kan knække Excel/Office adgangskoder så hurtigt, som det tager at knække en valnød (medmindre det er meget langt).
Avatar billede jath08ac Forsker
13. december 2017 - 20:52 #5
Kender godt til at knække koder i Excel og kender god til funktionen med at beskytte mine VBA koder med password i VBA Editor. Jeg ønsker bare ikke at brugerne skal kunne spille min VBA koder selv. De bliver styret af knapper i en tilpasset ny gruppe i min ribbon....
Avatar billede store-morten Ekspert
13. december 2017 - 21:11 #6
Sub test1()
Call test2
End Sub

Private Sub test2()
MsgBox "test"
End Sub

Virker da fint
Avatar billede store-morten Ekspert
13. december 2017 - 21:19 #7
#6 Virker kun hvis de ligger i sammen kodevindue
Avatar billede Sitestory Mester
13. december 2017 - 21:19 #8
Virker i hvert fald ikke i 2003, og hvis det virkede, ville det som sagt være en bug, for så var der ingen grund til at kunne deklarere noget "Private".
Avatar billede store-morten Ekspert
13. december 2017 - 21:38 #9
Sub test1()
Application.Run "Module1.test2"
End Sub

I Module1:
Private Sub test2()
MsgBox "test"
End Sub
Avatar billede store-morten Ekspert
14. december 2017 - 05:26 #10
Så, måske:

Sub VisRegnskabUNoterCallBack (cintrol as IRibbonControl)
Application.Run "SumFun.sumifRegnskabFunction"
End sub
Avatar billede bak Seniormester
14. december 2017 - 10:17 #11
du kan måske benytte dig af at sub's med parametre ikke kan ses.
Så hvis du vælge at skulle kalde sub'en med en dummy parameter burde det kunne lykkes uden Private.

sub test
call mysub (True)
end sub

Sub MySub(b as boolean)
skriv din koden her, b behøver ikke at blive benyttet
End Sub
Avatar billede store-morten Ekspert
15. december 2017 - 19:42 #12
Sub test()
Call Besked
End Sub

Sub Besked(Optional Dummy As Byte)
MsgBox "er toppen", , "Falster"
End Sub
Avatar billede store-morten Ekspert
15. december 2017 - 19:55 #13
Sub Besked, kan ligge hvor du ønsker.

Er der ikke en fejl i:
Sub VisRegnskabUNoterCallBack (cintrol as IRibbonControl)
" Control  "
Avatar billede store-morten Ekspert
22. december 2017 - 21:45 #14
På Ark1:
'*********************************
Sub test1()
'Synlig
Call MB1
End Sub

Private Sub MB1()
'Ikke Synlig
MsgBox "Test 1", , "På Ark1"
End Sub
'*********************************

Sub test2()
'Synlig
Call Besked_2
End Sub

Sub Besked_2(Optional Dummy As Byte)
'Ikke Synlig
MsgBox "Test 2", , "På Ark1"
End Sub
'*********************************

Sub test3()
'Synlig
Application.Run "Module1.MB_3"
End Sub

Sub test4()
'Synlig
Call Besked_4
End Sub
'*********************************

I Module1:
Private Sub MB_3()
'Ikke Synlig
MsgBox "Test 3", , "I Module 1"
End Sub

Sub Besked_4(Optional Dummy As Byte)
'Ikke Synlig
MsgBox "Test 4", , "I Module 1"
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester