"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/
>
Perchè?
Cosa devi fare runtime al progetto?
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://blog.maurogsc.eu/
"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č?
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.
>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
Scusa Tiziano, ma non ho capito.
>> 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...
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.
> > 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à ...
"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel
messaggio news:#60psIes...@TK2MSFTNGP05.phx.gbl...
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
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.
Sempre meglio evitare i riferimenti... ;-)
> 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
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
> 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
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
Grazie mille, approfondirò, dici che Visual Basic 2008 Express Edition
(scaricabile gratuitamente dal sito MS) può andare bene?
Grazie.
--
Bye!
Scossa
Già, però con il solo office installato faccio poco.
Comunque è uno spunto per approfondire.
Grazie .
--
Bye!
Scossa
"Mauro Gamberini" ha scritto:
DLL, VBS, CreateObject.... o è roba da mangiare o è roba da BLOG. :-))
E scusami Fratello se insisto !!
Eliano
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.
Le 2.45 di notte!
La mamma lo sa?
Fila a letto piccolino, fai la nanna!
8-)
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.
"r" <r...@discussions.microsoft.com> ha scritto nel messaggio
news:534278E5-64D5-437B...@microsoft.com...
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.
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
Ok, visto.
Ma per uare le funzoni (p.e. cubo) lato "celle"?
--
Bye!
Scossa
In un modulo standard:
Public Function Cubo(ByVal d As Double) As Double
Cubo = Funzioni.Cubo(d)
End Function
E ovviamente in una cella:
=Cubo(valore)
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!
> 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".
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.
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.
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
> 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.