Visualizzazione post con etichetta vba. Mostra tutti i post
Visualizzazione post con etichetta vba. Mostra tutti i post

martedì 4 ottobre 2011

Come rimuovere la password per le Macro VBA da Excel
Pubblicato da Alberto Armida | sabato 28 agosto 2010 | | Etichette: software, sviluppo
Un mio cliente mi contatta, chiedendomi di modificare un Excel utilizzato in azienda composto da alcune paginette più alcune Macro di VBA. Cerco di accedere alle Macro e... sorpresa! Richiesta di password di protezione VBA di Excel!!!

"Poco male" - penso. Contatto il cliente e mi sento rispondere: "Eh no... la password non gliela so dire. Questo foglio è stato fatto da una persona che ora non lavora più per noi. Ma tanto voi informatici ci mettete 10 minuti..." (chissà come mai la gente pensa che noi programmatori abbiamo la bacchetta magica o il dono dell'onniscienza... mah!)

Mi metto quindi alla ricerca di un modo per sproteggere questo dannato file: rivolgo una preghiera a San Google, che mi ritorna una serie di link che rimandano tutti a software a pagamento... no, grazie! Non intendo sborsare un minimo di 39$ per togliere una password!
Analizzando il file ed utilizzando quel poco di documentazione circa il formato XLS che Microsoft ha rilasciato... mi si accende una lampadina!!!

Aprite con il vostro editor esadecimale preferito il documento "vittima" (io utilizzo Notepad++ con il plugin Hex Editor)
Dal menù "Plugins", selezionate "Hex Editor", quindi "View in HEX" (CTRL+ALT+SHIFT+H, se preferite le scorciatoie da tastiera)
Dal menù "Cerca", selezionate "Cerca" e compilate la maschera come indicato in figura (cercate quindi "DPB" in formato Unicode)
Una volta localizzata la stringa, cambiatela in "DPx" (attenzione alle maiuscole e minuscole, è importante)
Salvate e chiudete l'editor
Aprite ora il vostor file Excel e rispondete "Sì" a questo messaggio di errore

Ora premete ALT+F11 per accedere al codice VBA del progetto. Vi verrà mostrato un "Errore imprevisto (40230)", non ve ne preoccupate e cliccate "OK" sino a che non si aprirà la maschera dell'editor VB di Excel
Ora dovreste già vedere gli oggetti VBA che compongono il progetto, ma non abbiamo ancora finito. Dal menù "Strumenti" selezionate "Proprietà di VBA Project", scheda "Protezione" e, se selezionato, deselezionate "Proteggi progetto dalla visualizzazione" ed inserite una nuova password per proteggere il foglio. (di fatto, state forzando Excel a riscrivere correttamente la sezione del file relativa alla protezione).
Confermate premendo "OK", salvate e chiudete il foglio di lavoro.
Ora potete riaprire il foglio e, se lo reputate neccessario, eliminate la password (tornando nella maschera sopra riportata), in modo da non avere più la richiesta quando cercate di visualizzare le proprietà del progetto.

Semplice, efficace... e soprattutto economico! Almeno 39$ risparmiati. :)

PS: ovviamente quando sopra riportato è puramente a fini didattici o per accedere a vostri Excel dei quali avete dimenticato la password o per i quali siete stati esplicitamente autorizzati dal legittimo proprietario.

giovedì 16 aprile 2009

Macro per formule automatiche su riga

Lo scopo di questo post è spiegare come inserire una riga di formule in vba in excel.
questo può venire applicato per ad esempio creare una serie di righe contenenti ad esempio formule e valori ripetute per n righe secondo un criterio stabilito o proveniente dalle elaborazioni...
le funzioni da utilizzare sono:

  • ActiveCell.Offset(rowOffset:="spostamento righe",columnOffset:="spostamento colonne").select
    questo comando serve per rendedre attiva una cella dando lo spostamento dalla corrente
  • ActiveCell.FormulaR1C1 = "=R[-1]C+1"
    questo comando serve per inserire una formula in luguaggio magro utilizzando il riferimento riga colonna per le celle
  • ActiveCell.FormulaR1C1Local = "=somma(r[1]c:r[4]c)
    questo comando a differenza del presente utilizza il linguaggio excel con i riferimenti riga colonna
Un esempio dell'utilizzo delle precedenti formule in un foglio dove si calcola il piano di ammortamento di un mutuo.

ActiveCell.FormulaR1C1 = "=R[-1]C+1"
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
ActiveCell.FormulaR1C1Local = "=ASS(RATA(rc[6]/r6c2;r7c2--R[-1]C[-1];R[-1]C[5]))+RC[1]"
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
ActiveCell.FormulaR1C1Local = "0"
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
ActiveCell.FormulaR1C1Local = "=R[-1]C[3]*(RC[4]/R6C2)"
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
ActiveCell.FormulaR1C1 = "=RC[4]-RC[-1]"
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
ActiveCell.FormulaR1C1 = "=R[-1]C+RC[-1]"
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
ActiveCell.FormulaR1C1 = "=R[-1]C-RC[-2]"
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
ActiveCell.FormulaR1C1 = "=R[-1]C"
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
ActiveCell.FormulaR1C1 = "=R[-1]C"