Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

come togliere protezione da VBA con codice

1,214 views
Skip to first unread message

Drago

unread,
Mar 30, 2009, 6:47:18 AM3/30/09
to
Ho creato una macro ed ho protetto il progetto con la PSW "123"
Vorrei sapere qual'è l'istruzione per poter togliere la protezione nel
codice VBAtramite macro.
ho provato con
"123".unpotect=true
ma non funziona
.......... e ovviamente quello per rimetterla
Grazie

Drago

unread,
Mar 30, 2009, 12:19:23 PM3/30/09
to
io voglio sproteggere il progetto sapendo la password (sempre tramite
codice), neanche questo è possibile?
Saluti


"r" <r...@discussions.microsoft.com> ha scritto nel messaggio
news:D25BDBDB-183A-4B95...@microsoft.com...
> "Drago" ha scritto:


>
>> Ho creato una macro ed ho protetto il progetto con la PSW "123"
>> Vorrei sapere qual'è l'istruzione per poter togliere la protezione nel
>> codice VBAtramite macro.
>> ho provato con
>> "123".unpotect=true
>> ma non funziona

>> ........... e ovviamente quello per rimetterla
>> Grazie
>
> non mi sembra sia possibile da codice sproteggere il
> progetto, puoi solo verificare se è protetto o meno
>
> saluti
> r
>
> --
> -------------------------------------------------------------------------------------
> http://excelvba.altervista.org/blog/index.php/Table/Excel-VBA/
>

Mauro Gamberini

unread,
Mar 30, 2009, 12:28:32 PM3/30/09
to
> io voglio sproteggere il progetto sapendo la password (sempre tramite
> codice), neanche questo è possibile?
>

Perchè?
Cosa devi fare runtime al progetto?

--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://blog.maurogsc.eu/


Drago

unread,
Mar 30, 2009, 2:19:53 PM3/30/09
to
ho una macro che ad una tal data mi cancella tutti i moduli e i codici
scritti.
Io vorrei proteggere il codice, ma ho notato che se eseguo il codice per
eliminare le macro e queste ultime sono protette, mi va in errore.


"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel
messaggio news:#6hMSSVs...@TK2MSFTNGP02.phx.gbl...


>> io voglio sproteggere il progetto sapendo la password (sempre tramite

>> codice), neanche questo č possibile?
>>
>
> Perchč?

Mauro Gamberini

unread,
Mar 31, 2009, 3:23:03 AM3/31/09
to
> ho una macro che ad una tal data mi cancella tutti i moduli e i codici
> scritti.
> Io vorrei proteggere il codice, ma ho notato che se eseguo il codice per
> eliminare le macro e queste ultime sono protette, mi va in errore.
>

Ne abbiamo già discusso n volte.
Questo tipo di protezione è inefficace.
Se decido di *craccare* il file, una data
di scadenza e il codice nei moduli di Excel
non sono sufficenti.

Il link che ti ha postato Eliano risolve solo
in parte il tuo problema.
Devi referenziare le librerie di Office e
di Excel(è ciò che vedo scritto nel modulo).
Questo ti creerà problemi
se distribuirai il file, in quanto non sai *quale*
versione di Excel lo aprirà.
Le strade sono 2. Una distribuzione diversa per ogni
versione di Excel o non referenziare le librerie
e lavorare con CreateObject.

Tiziano Marmiroli

unread,
Mar 31, 2009, 3:50:20 AM3/31/09
to
Il Tue, 31 Mar 2009 09:23:03 +0200, Mauro Gamberini ha scritto:

>Il link che ti ha postato Eliano risolve solo
>in parte il tuo problema.
>Devi referenziare le librerie di Office e
>di Excel(è ciò che vedo scritto nel modulo).
>Questo ti creerà problemi
>se distribuirai il file, in quanto non sai *quale*
>versione di Excel lo aprirà.
>Le strade sono 2. Una distribuzione diversa per ogni
>versione di Excel o non referenziare le librerie
>e lavorare con CreateObject.

Un'alternativa brutta, sporca e cattiva (ma che immagino funzioni) é
usare il metodo SendKeys e le scorciatoie da tastiera.
--
Tiziano Marmiroli
Microsoft MVP - Office System
http://www.riolab.org

Mauro Gamberini

unread,
Mar 31, 2009, 4:14:45 AM3/31/09
to
> Un'alternativa brutta, sporca e cattiva (ma che immagino funzioni) é
> usare il metodo SendKeys e le scorciatoie da tastiera.
>

Scusa Tiziano, ma non ho capito.

Tiziano Marmiroli

unread,
Mar 31, 2009, 5:06:15 AM3/31/09
to
Il Tue, 31 Mar 2009 10:14:45 +0200, Mauro Gamberini ha scritto:

>> Un'alternativa brutta, sporca e cattiva (ma che immagino funzioni) é
>> usare il metodo SendKeys e le scorciatoie da tastiera.

>Scusa Tiziano, ma non ho capito.

Il problema é sproteggere il progetto vba, non possiamo farlo via codice
perché quelle proprietá non sono esposte. Immagino sia possibile
aggirare il problema usando SendKeys per replicare le azioni
dell'utente.

Application.SendKeys ("%{f11}")

e cosí via...

Mauro Gamberini

unread,
Mar 31, 2009, 5:22:11 AM3/31/09
to
> Il problema é sproteggere il progetto vba, non possiamo farlo via codice
> perché quelle proprietá non sono esposte. Immagino sia possibile
> aggirare il problema usando SendKeys per replicare le azioni
> dell'utente.
>
> Application.SendKeys ("%{f11}")
>

Ah, capito.
Credevo ti riferissi al referenziare
le librerie.
Uhmmm...,una cosa OT, ma Maurizio una volta
postò qualcosa sul referenziarle
runtime da codice? Forse non ricordo
bene.

r

unread,
Mar 31, 2009, 6:39:02 AM3/31/09
to

"Mauro Gamberini" ha scritto:

> > Il problema é sproteggere il progetto vba, non possiamo farlo via codice
> > perché quelle proprietá non sono esposte. Immagino sia possibile
> > aggirare il problema usando SendKeys per replicare le azioni
> > dell'utente.
> >
> > Application.SendKeys ("%{f11}")
> >
>
> Ah, capito.
> Credevo ti riferissi al referenziare
> le librerie.
> Uhmmm...,una cosa OT, ma Maurizio una volta
> postò qualcosa sul referenziarle
> runtime da codice? Forse non ricordo
> bene.

è possibile avendo referenziato
Microsoft Visual Basic for Applications Extensibility 5.3
e immagino che Drago l'abbia già referenziata per
consentire di cancellare il codice del progetto ...
ciò che ha suggerito eliano utilizza delle API.

'Microsoft Visual Basic for Applications Extensibility 5.3
Sub test()
Dim oRef As References
Dim rif As Reference

Set oRef = ThisWorkbook.VBProject.References

For Each rif In oRef
Debug.Print rif.GUID
Debug.Print rif.Major
Debug.Print rif.Minor
Next

'si può utilizzare AddFromGuid
'passando iparametri GUID,Major, Minor
End Sub

personalmente quando ho referenziato
Microsoft Visual Basic for Applications Extensibility 5.3
l'ho sempre fatto per aggiungerecodice mai per cancellarlo
cosa di cui non vedo l'utilità ...

Drago

unread,
Mar 31, 2009, 6:44:05 AM3/31/09
to
Scusate ma non ho capito bene il metodo Application.SendKeys ("%{f11}")
supponiamo che la psw del mio progetto sia "123" come devo fare per entrarci
tramite sendKeys ? potresti farmi qualche esempio semplice per aggirare il
mio problema
Grazie

"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel

messaggio news:#60psIes...@TK2MSFTNGP05.phx.gbl...

r

unread,
Mar 31, 2009, 6:46:04 AM3/31/09
to
"r" ha scritto:

aggiungo ...
è sempre bene prima verificare se è presente un
riferimento ...

Function VerificaRiferimento(Rif As String) As Boolean
Dim v
For Each v In Application.VBE.ActiveVBProject.References
If UCase(v.Name) = UCase(Rif) Then
VerificaRiferimento = True
Exit Function
End If
Next
End Function

per esempio ...
nella finestra immediata
?VerificaRiferimento("VBIDE")

verifica il riferimento a

Microsoft Visual Basic for Applications Extensibility

saluti

Mauro Gamberini

unread,
Mar 31, 2009, 6:48:27 AM3/31/09
to
> è possibile avendo referenziato
> Microsoft Visual Basic for Applications Extensibility 5.3
>

Grazie Roberto, ma non mi sembra
questo che già conosco.
Ma sicuramente non ricordo bene io.

> l'ho sempre fatto per aggiungerecodice mai per cancellarlo
> cosa di cui non vedo l'utilità ...
>

Mai lavorato con le .dll?
Metti il codice(Function, Sub) in una dll,
la distribuisci assieme al file, la
metti da qualche parte(via codice)
che corrisponde al riferimento che le hai
dato(o la registri), cancelli la parte di codice che ha
eseguito questa cosa.
Il resto del codice lavorerà poi con
la .dll.

Mauro Gamberini

unread,
Mar 31, 2009, 6:50:36 AM3/31/09
to
> è sempre bene prima verificare se è presente un
> riferimento ...
>

Sempre meglio evitare i riferimenti... ;-)

r

unread,
Mar 31, 2009, 6:54:10 AM3/31/09
to
"Mauro Gamberini" ha scritto:

> Ne abbiamo già discusso n volte.
> Questo tipo di protezione è inefficace.
> Se decido di *craccare* il file, una data
> di scadenza e il codice nei moduli di Excel
> non sono sufficenti.

infatti basta aprire il file con OpenOffice

scos...@gmail.com

unread,
Mar 31, 2009, 8:00:13 AM3/31/09
to
On 31 Mar, 12:48, "Mauro Gamberini"

<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> Mai lavorato con le .dll?
> Metti il codice(Function, Sub) in una dll,

Ecco, mi spieghi per bene questa cosa?
Non cosa significa ma come si fa: quali strumenti/programmi (non credo
si possa fare tutto con excel)?, basta Visual Basic? etc....

> la distribuisci assieme al file, la
> metti da qualche parte(via codice)

Anche qui sarebbe interessante avere maggiori info ... se ti va di
approfondire.

Grazie.

__
Bye!

Scossa

r

unread,
Mar 31, 2009, 8:36:04 AM3/31/09
to

"scos...@gmail.com" ha scritto:

> On 31 Mar, 12:48, "Mauro Gamberini"
> <maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> > Mai lavorato con le .dll?
> > Metti il codice(Function, Sub) in una dll,
>
> Ecco, mi spieghi per bene questa cosa?
> Non cosa significa ma come si fa: quali strumenti/programmi (non credo
> si possa fare tutto con excel)?, basta Visual Basic? etc....

inizia ad aggiungere i riferimenti a

Microsoft Visual Basic for Applications Extensibility 5.3

poi giocaci un po' su ...
per scrivere una dll
inizia da qua:
Metodo MakeCompiledFile

Mauro Gamberini

unread,
Mar 31, 2009, 9:53:21 AM3/31/09
to
>> Metti il codice(Function, Sub) in una dll,
>
> Ecco, mi spieghi per bene questa cosa?
> Non cosa significa ma come si fa: quali strumenti/programmi (non credo
> si possa fare tutto con excel)?, basta Visual Basic? etc....
>

Se per .dll intendiamo le DLL ActiveX
(che sono quelle che utilizzo io extra .net)e
rimanendo in ambito linguaggio Visual Basic,
il caro, vecchio VisualStudio 6.0
o Visual Basic 6.0(non ricordo con
le versione precedenti).

>> la distribuisci assieme al file, la
>> metti da qualche parte(via codice)
>
> Anche qui sarebbe interessante avere maggiori info ... se ti va di
> approfondire.
>

Non è difficile. Esempio.
Distribuisci una cartella(Directory)
con all'interno il file di Excel e
la dll.
Il file avrà un riferimento alla dll
posizionata in, ad esempio, C:\Pippo
(ti ricordo che l'hai programmato
nel tuo ambiente di lavoro).
All'avvio del file sul nuovo pc un semplice taglia/copia
(via codice) sposta la dll nella cartella
C:\Pippo(se la directory non c'è, la creo, e questo credo
sia facile). Poi elimino il modulo che contiene
questa procedura(posso anche utilizzare un file
vbs con due righe di codice).

Mettiamo ora che nella dll abbia una classe queste due Function:

Public Function Cubo(ByVal d As Double) As Double
Cubo = d ^ 3
End Function

Public Function Quadrato(ByVal d As Double) As Double
Quadrato = d ^ 2
End Function

Una volta che ho il riferimento alla dll posso
dal codice di Excel chiamarle così:

Public Sub m()
MsgBox Funzioni.Quadrato(3)
End Sub

Tu, dal codice di Excel, puoi solo invocare la funzione
senza sapere come faccio a restituirti il valore,
perchè il codice si trova nella dll.


Questa cosa, in un ambiente controllato,
impedisce(rende difficili) manipolazioni al codice.
Inoltre, non registrando la dll ma mettendo
solo un riferimento, se devo aggiungere
o modificare codice alla dll, posso farlo
tranquillamente a casa e distribuire,
ad esempio, una cartellina(Directory)
con un vbs e la dll. Due righe vbs
mi elimineranno la dll vecchia e la sostituiranno
con la nuova.

Se nella dll ho la data di scadenza della stessa...
Tu dirai che puoi mettere indietro la data
del pc. Diciamo che la dll controllerebbe altre cose
nel registro per validarsi(e qui ognuno ha i suoi
*trucchi*...).

Invito però a considerare ciò che ora è possibile fare
con soluzioni sviluppate in .net.

Inoltre, l'errore di fondo ritengo sia continuare a
pensare al file di Excel come ad una
applicazione. Ripeto un concetto
(personale) già espresso qui più volte.
Codice e protezioni *servirebbero* per
automatizzare alcune operazioni
ed impedire errori di immissione, modifica,
cancellazione dati da parte
dell'utente.

Un programma compilato(che perchè no
si appoggi *anche* ad Excel) è un'altra cosa.


Qui alcuni link per le DLL ActiveX:

http://www.google.it/search?hl=it&q=creare+activex+dll&meta=&aq=f&oq=

Per Visual Basic 6.0/Visual Studio 6.0 credo
(lo erano fino allo scorso anno) siano
ancora disponibili(legalmente) solo tramite
abbonamento ad MSDN.

http://msdn.microsoft.com/it-it/default.aspx

Scossa

unread,
Mar 31, 2009, 2:47:52 PM3/31/09
to
In article <eqF3Nggs...@TK2MSFTNGP03.phx.gbl>,
maurogsc...@RIMUOVEREaliceposta.it says...

> Se per .dll intendiamo le DLL ActiveX
> (che sono quelle che utilizzo io extra .net)e
> rimanendo in ambito linguaggio Visual Basic,
> il caro, vecchio VisualStudio 6.0
> o Visual Basic 6.0(non ricordo con
> le versione precedenti).

Grazie mille, approfondirò, dici che Visual Basic 2008 Express Edition
(scaricabile gratuitamente dal sito MS) può andare bene?

Grazie.

--

Bye!

Scossa

Scossa

unread,
Mar 31, 2009, 2:50:04 PM3/31/09
to
In article <3F2191B1-F807-4778...@microsoft.com>,
r...@discussions.microsoft.com says...

> inizia da qua:
> Metodo MakeCompiledFile
>

Già, però con il solo office installato faccio poco.

Comunque è uno spunto per approfondire.

Grazie .

--

Bye!

Scossa

eliano

unread,
Mar 31, 2009, 8:45:01 PM3/31/09
to

"Mauro Gamberini" ha scritto:

DLL, VBS, CreateObject.... o è roba da mangiare o è roba da BLOG. :-))
E scusami Fratello se insisto !!
Eliano

Mauro Gamberini

unread,
Apr 1, 2009, 3:26:06 AM4/1/09
to
> Se per .dll intendiamo le DLL ActiveX
> (che sono quelle che utilizzo io extra .net)e
> rimanendo in ambito linguaggio Visual Basic,
> il caro, vecchio VisualStudio 6.0
> o Visual Basic 6.0(non ricordo con
> le versione precedenti).

Grazie mille, approfondirò, dici che Visual Basic 2008 Express Edition
(scaricabile gratuitamente dal sito MS) può andare bene?

****************************************

Per sviluppare applicazioni Office con Visual Basic.NET
è sufficiente Visual Studio Tools For Office
(VSTO). Guarda qui:

http://msdn.microsoft.com/it-it/library/23cw517s(VS.80).aspx
http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=f5539a90-dc41-4792-8ef8-f4de62ff1e81

Attento, però. E' tutt'altra cosa rispetto al mondo
COM(DLL ActiveX) e anche il linguaggio
(seppur molto simile) *non è*
il Visual Basic che utilizzi nel VB(A) di Excel.

Mauro Gamberini

unread,
Apr 1, 2009, 3:29:14 AM4/1/09
to
> DLL, VBS, CreateObject.... o è roba da mangiare o è roba da BLOG. :-))
> E scusami Fratello se insisto !!
> Eliano
>

Le 2.45 di notte!
La mamma lo sa?
Fila a letto piccolino, fai la nanna!
8-)

Mauro Gamberini

unread,
Apr 1, 2009, 4:53:53 AM4/1/09
to
<cut>

Tanto per capire come funziona
DLL ActiveX.

Qui trovi una seplice DLL ActiveX creata
con VisualStudio 6.0:

http://www.webalice.it/maurogsc/prova/myMath.zip

*Unzippala* da qualche parte.
Apri Excel.
Editor vb.
Metti il riferimento alla dll
(Strumenti-->Riferimenti ecc.).
In una Sub scrivi:
MsgBox Funzioni. (punto)
Vedi le funzioni che espone
la dll.
Prova anche a cambiare directory
alla dll per vedere che succede,
a file di Excel aperto o chiuso.

Drago

unread,
Apr 1, 2009, 6:45:29 AM4/1/09
to
Tornando al discorso iniziale ho raggirato il problema disattivando il menu
strumenti (per non accedere alle macro).
Mi manca il codice per disattivare il menu che compare clikkando col tasto
dx del mouse quando sono posizionato sulle linguette dei fogli
e ultima cosa disattivare il tasto F11 in maniera tale da rendere
inaccessibile il VBA
Grazie

"r" <r...@discussions.microsoft.com> ha scritto nel messaggio
news:534278E5-64D5-437B...@microsoft.com...

Mauro Gamberini

unread,
Apr 1, 2009, 8:44:26 AM4/1/09
to
> Mi manca il codice per disattivare il menu che compare clikkando col tasto
> dx del mouse quando sono posizionato sulle linguette dei fogli
> e ultima cosa disattivare il tasto F11 in maniera tale da rendere
> inaccessibile il VBA
>

Di qualche giorno fa:

<oldPost>

>č possibile disabilitare il menů (tutto o solo il sposta/copia dei fogli)
>della linguetta (o come ho visto dai precedenti NG che viene chiamata
>"cavalierino") dei fogli?

Subject: Disattivare la barra dei menu foglio di lavoro
Date: Thu, 22 Jul 2004 23:13:26 -0700
www.google.it/groups?threadm=281d01c4707c$2a3f3ea0$a601...@phx.gbl

Subject: Inibire Menu contestuale
Date: Wed, 5 Nov 2003 09:26:07 -0800
www.google.it/groups?threadm=79B6544D-9DE6-4BA9-B518-7FAE42BED8DE%40microsoft.com

Facci sapere se e come hai risolto, grazie.


--
Tiziano Marmiroli
Microsoft MVP - Office System
http://www.riolab.org

</oldPost>

> e ultima cosa disattivare il tasto F11 in maniera tale da rendere
> inaccessibile il VBA
>

Prova una cosa tipo:

Modulo di ThisWorkbook

Private Sub Workbook_Open()
Call a
End Sub

Private Sub a()
Application.OnKey "%{F11}", "m"
End Sub

Private Sub aa()
Application.OnKey "%{F11}"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call aa
End Sub


Modulo Standard

Private Sub m()
MsgBox "Procedura non attiva."
End Sub

Puoi sostituire:

Application.OnKey "%{F11}", "m"

con

Application.OnKey "%{F11}", ""

se non vuoi richiamare nessuna macro.

Ricorda sempre OpenOffice.

Scossa

unread,
Apr 1, 2009, 5:39:12 PM4/1/09
to
In article <#Ke3gsps...@TK2MSFTNGP02.phx.gbl>,
maurogsc...@RIMUOVEREaliceposta.it says...

>
> Per sviluppare applicazioni Office con Visual Basic.NET
> è sufficiente Visual Studio Tools For Office
> (VSTO). Guarda qui:
>
> http://msdn.microsoft.com/it-it/library/23cw517s(VS.80).aspx
> http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=f5539a90-dc41-4792-8ef8-f4de62ff1e81
>

Quanta carne al fuoco, spero nel weekend di poter approfondire.

> Attento, però. E' tutt'altra cosa rispetto al mondo
> COM(DLL ActiveX) e anche il linguaggio
> (seppur molto simile) *non è*
> il Visual Basic che utilizzi nel VB(A) di Excel.
>

Ma il Visual Basic 2008 Express Edition "cos'è" ?

Grazie.

--

Bye!

Scossa

Scossa

unread,
Apr 1, 2009, 5:40:43 PM4/1/09
to
In article <u8DQjdqs...@TK2MSFTNGP04.phx.gbl>,
maurogsc...@RIMUOVEREaliceposta.it says...

> <cut>
>
> Tanto per capire come funziona
> DLL ActiveX.
>
> Qui trovi una seplice DLL ActiveX creata
> con VisualStudio 6.0:
>

Ok, visto.

Ma per uare le funzoni (p.e. cubo) lato "celle"?

--

Bye!

Scossa

Mauro Gamberini

unread,
Apr 2, 2009, 2:55:23 AM4/2/09
to
> Ma per uare le funzoni (p.e. cubo) lato "celle"?
>

In un modulo standard:

Public Function Cubo(ByVal d As Double) As Double

Cubo = Funzioni.Cubo(d)
End Function

Mauro Gamberini

unread,
Apr 2, 2009, 3:01:31 AM4/2/09
to
<cut>

E ovviamente in una cella:
=Cubo(valore)

Mauro Gamberini

unread,
Apr 2, 2009, 3:32:39 AM4/2/09
to
> Ma il Visual Basic 2008 Express Edition "cos'è" ?
>

E' un ambiente di sviluppo per creare
programmi eseguibili con il linguaggio
Visual Basic.NET ed il Framework 3.5.
E' gratuito e scaricabile dal sito Microsoft:

http://www.microsoft.com/Express/VB/

Puoi selezionare la lingua per la versione
localizzata di tua preferenza.
Ti consiglirei la versione inglese
(tutti i bravi programmatori
usano quella...;-)).

Le applicazioni create possono essere
distribuite senza problema(non occorre
nessuna licenza per distribuirle).

Io non so cosa tu voglia/debba fare.
Valuta però, nel caso ti voglia avventurare
nel mondo .NET, C#:

http://www.microsoft.com/express/vcsharp/

Non ti spaventare del fatto che sia *diverso*
dal vb/vba che utilizzi adesso. Come accennato,
anche il VB.NET è solo *parente* del VB.

E qui puoi invece scaricare Visual Web Developer Express per
creare siti Web(con entrambi i linguaggi,
VB.NET e C#):

http://www.microsoft.com/express/vwd/Default.aspx


Qui trovi il supporto dei *magici* ng
microsoft:

microsoft.public.it.dotnet.vb
microsoft.public.it.dotnet.csharp
microsoft.public.it.dotnet.asp
microsoft.public.it.dotnet.ado
microsoft.public.it.dotnet.framework
microsoft.public.it.dotnet.vstudio
microsoft.public.it.dotnet.windowsforms


Una ricerca con Google ti darà
n siti con tutorial, codice, tips,
ecc.

Se decidi, benvenuto in .NET!

am A.

unread,
Apr 12, 2009, 10:30:48 AM4/12/09
to
Il 01/04/2009, Mauro Gamberini ha detto :

> Tanto per capire come funziona
> DLL ActiveX.

> Qui trovi una seplice DLL ActiveX creata
> con VisualStudio 6.0:

> http://www.webalice.it/maurogsc/prova/myMath.zip

> *Unzippala* da qualche parte.
> Apri Excel.
> Editor vb.
> Metti il riferimento alla dll
> (Strumenti-->Riferimenti ecc.).
> In una Sub scrivi:
> MsgBox Funzioni. (punto)
> Vedi le funzioni che espone
> la dll.

ti è possibile postare il codice della DLL e i riferimenti eventuali, o
darmi qualche link specifico per i vari passaggi.. ho provato ad
inserire la funzione di Norman ( Function LastRow(Sh As Worksheet, _
Optional rng As Range))
in una DLL ActiveX con VB6 ma non accetta i parametri e da un sacco di
errori in compilazione

--
am. A.

dal blog del " Vero Programmatore"
Il Vero Programmatore dialoga con il modem. ad impulsi. Ripete a voce
"Pppuuuu... Ppuu Pa Pu Paaaa Puuuuu".


Mauro Gamberini

unread,
Apr 14, 2009, 4:43:42 AM4/14/09
to
> ti è possibile postare il codice della DLL e i riferimenti eventuali, o
> darmi qualche link specifico per i vari passaggi..

1)Avvio VisualStudio 6.0(o Vb 6.0)
2)Seleziono DLL ActiveX
3)Apri
4)Nelle proprietà di Class1,
setto la proprietà:
Instancing: 6 - Global Multiuse
5)Modifico il nome della classe
a mio piacimento.
6)Inserisco il codice delle varie
funzioni come Public, es.:

Public Function Quadrato(ByVal d As Double) As Double
Quadrato = d^2
End Function

Se le mie funzioni utilizzano altro codice
(Campi, Costanti, Sub, Function,
Classi) che non voglio esporre all'esterno, le dichiarerò
Private.
7)Barra dei Menu-->Progetto-->Proprietà di Progetto1
Linguetta: Generale
8)Modifico il nome del progetto a mio piacimento
9)Eventualmente vado nella linguetta: Crea
se mi interessa *giocare* con le versioni
10)Barra dei Menu-->File-->Crea NomeDelProgetto.dll

Se hai ancora problemi seguendo la procedura qui
sopra, gentilmente posta qui:

la procedura che segui
la macro in questione

Grazie.

am A.

unread,
Apr 14, 2009, 10:45:04 AM4/14/09
to
dal microsoft.public.it.office.excel.. Mauro Gamberini martedì,
14/04/2009:
a proposito di: Re: come togliere protezione da VBA con codice

mi mancava Instancing: 6 - Global Multiuse.. adesso funziona
perfettamente..ancora un paio di domandine di grazia..
1)se la progetto aggiungo un modulo, lo adopero come nel VBA di EXCEL ?
2)nella lista dei riferimenti disponibili in excel mi ritrovo un tot di
progetto1 che non puntano da nessuna parte e non so come togliere..
grazie per le info e la disponibilità

--
am. A.

dal blog del " Vero Programmatore"

Il Vero Programmatore se si incazza ti uccide con la spada laser.


Mauro Gamberini

unread,
Apr 14, 2009, 11:10:48 AM4/14/09
to
> mi mancava Instancing: 6 - Global Multiuse.. adesso funziona
> perfettamente..ancora un paio di domandine di grazia..
> 1)se la progetto aggiungo un modulo, lo adopero come nel VBA di EXCEL ?
>

Personalmente nelle DLL ActiveX utilizzo quasi esclusivamente
moduli di classe. Comunque, la risposta alla tua
domanda è si.

> 2)nella lista dei riferimenti disponibili in excel mi ritrovo un tot di
> progetto1 che non puntano da nessuna parte e non so come togliere..
> grazie per le info e la disponibilità
>

Se(se) ho capito quello che chiedi
devi de-registrarli(e questo vuol dire che
precedentementi li hai registrati).
Qui uno dei tanti siti che ti insegna come
fare.

http://www.wintricks.it/manuali/dll2.html

Puoi farlo da vb:

Public Sub m()


On Error GoTo RigaErrore


Shell ("Regsvr32.exe *path e nome della libreria* /u")


RigaChiusura:
Exit Sub


RigaErrore:
MsgBox Err.Number & vbNewLine & Err.Description
Resume RigaChiusura


End Sub

am A.

unread,
Apr 14, 2009, 1:08:45 PM4/14/09
to
Nel suo scritto precedente, Mauro Gamberini ha sostenuto :

> http://www.wintricks.it/manuali/dll2.html

> Puoi farlo da vb:

> Public Sub m()


> On Error GoTo RigaErrore


> RigaChiusura:
> Exit Sub


> End Sub

risolto con ricerca/cancellazione delle chiavi e pulizia registro..
grazie

--
am. A.

dal blog del " Vero Programmatore"

Nel caso erediti una vecchia casa, il Vero Programmatore non la
ristruttura. La sovrascrive.


0 new messages