Benvenuto

Forum del sito Nina art e graphic - grafica e non solo.... > Le routines VBA > creare una slidershow html in vba
Non sei collegato. Entra oppure Registati.

1

  

Le routines VBA :: creare una slidershow html in vba

Autore: Topic: creare una slidershow html in vba
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Posted: 27 Jun, 2008 1:19:58 pm    
Profilo homepage email micdas

Non so a chi possa interessare, ma penso che, prima o poi, molti di chi scrive per il Web si trovi di fronte alla necessità di presentare una serie di immagini o di foto.

La cosa è alquanto noiosa o, quantomeno, ci costringe a cercare dei programmi a pagamento o dei pacchetti opensource, che ci permettono di realizzare la presentazione di immagini o foto.

Ebbene sono lieto di avvisarvi di essere in grado di presentare un mio lavoro che ho realizzato per effettuare, in modo semplice, questo lavoro.

Ovviamente, per semplificare il lavoro da fare in VBA occorre eseguire un lavoro di preparazione.

Per semplificare la presentazione di questo tutorial, lo presenterò diviso in più POST 

 

mike
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Ultima modifica: admin on 24 Sep, 2008 12:51:58 pm
Posted: 27 Jun, 2008 2:37:37 pm    
Profilo homepage email micdas

PREPARAZIONE DEL LAVORO
Prima di iniziare è bene eseguire alcuni lavori preparatori.

Quel che dobbiamo fare è:
preparare un CSS per la formattazione delle pagine
preparare un JS per il popup
preparare la pagina master per raccogliere le miniature delle immagini
preparare la pagina master per la visualizzazione delle immagini reali
preparare le cartelle nel nostro disco fisso in modo da ospitare in modo organico il nostro lavoro
preparare un file di Excel in modo che possa lavorare secondo le nostre direttive.


Il Css
io ho preparato questo

Il JS
io ho preparato questo

la pagina master per la raccolta delle miniature
E' possibile creare la pagina come più preferite usando queste due accortezze:
la pagina avrà questo nome: slide_origine.htm
al posto della tabella per le miniature avrà questo segnaposto: <!---Inserisci tabella --->
Io ho preparato questa

la pagina master per la visualizzazione delle immagini
anche questa la potete creare come più vi piace.
la pagina avrà questo nome: foto_origine.htm
nella pagina ci saranno questi segnaposti nelle postazioni dove vogliamo i vari elementi:

<!--- titolo ---> qui verrà scritta una didascalia prelevata da una serie di file di testo
<!--- menu sinistro ---> qui verrà visualizzata la miniatura precedente a quella corrente (se quella corrente non è la prima)

<!--- menu destro ---> qui verrà visualizzata la miniatura susseguente a quella corrente (se quella corrente non è l'ultima)

<!--- immagine ---> qui verrà inserita l'immagine nelle sue dimensioni reali
<h1>immagine</h1> considero anche questo come segnaposto e fazzio visualizzare il messaggio: "Immagine x di y"

Io ho preparato questa


preparazione delle cartelle sul disco fisso
nella cartella principale mettere i files necessari al template:
stile.css
funzioni_js.js
slide_origine.htm
foto_origine.htm

sempre nella cartella principale creare 3 sottocartelle:
clipart
dida
tumbs

in queste tre sottocartelle inserire le immagini da usare (.jpg e/o .gif)
nella cartella clipart: lasciare inalterate le immagini
nella cartella tumbs: con un programma di fotoritocco ridurre le dimensioni delle immagini ad una dimensione adatta per delle miniature
nella cartella dida: importante : rinominare tutti i files come .txt
aprire, uno alla volta, tutti i .txt
cancellare tutto il contenuto
scrivere al posto di questo la didascalia che deve accompagnare le immagini

Fine della prima parte preparatoria

Nel prossimo post apriremo finalmente Excel

 

mike
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Posted: 27 Jun, 2008 2:56:10 pm    
Profilo homepage email micdas

dimenticavo due cose:
se avete difficoltà nell'aprire i link che ho segnalato e quelli che segnalerò in seguito, vi comportate in questo modo:
Col tasto destro scegliete "Copia indirizzo"
questo indirizzo lo incollate poi nella barra degli indirizzi del vostro browser
per vedere il codice delle pagine .htm potete usare l'opzione che vi offre il vostro browser

Ora posso continuare col nuovo post

 

mike
 admin
 Nina


 Posts: 60
 Registrato il:
   23-02-2008

 MSN: ninagraphic@hotmail.it  



Ultima modifica: admin on 27 Jun, 2008 3:01:47 pm
Posted: 27 Jun, 2008 3:01:17 pm    
Profilo homepage email admin

perfetto Mike, hai fatto un tutorial che servirà a molti, anzi devo mettere in linea delle immagini, così lo provo

 

Nina...
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Ultima modifica: micdas on 27 Jun, 2008 9:34:33 pm
Posted: 27 Jun, 2008 9:22:54 pm    
Profilo homepage email micdas

Il lavoro su Excel

Per facilitarmi il lavoro nel codice del VBA e, per rendere il più malleabile possibile l'applicativo finale ho deciso di mettere alcune costanti direttamente nel foglio.

Non imposta se, occupiamo delle celle nel foglio di Excel, in quanto questo ci serve solo come supporto per il lavoro che dobbiamo fare.

Perciò andiamo a scrivere queste costanti:
A1 --->  C:\Programmi\EasyPHP\www\slidershow  ....  la cartella principale
A2 ---> C:\Programmi\EasyPHP\www\slidershow\clipart  ...  la cartella delle immagini
A3 ---> C:\Programmi\EasyPHP\www\slidershow\tumbs  ...  la cartella delle miniature
A4 ---> slide_origine.htm   ...  il nome della pagina master per le miniature
A5 ---> Slideshow.htm  ...  la pagina da generare (è possibile assegnarle un nome diverso)
A6 ---> 5    ...  n° di colonne da mettere nella pagina finale (è possibile modificarle

A7 ---> <!---Inserisci tabella --->  ...  segnalibro per indicare dove inserire la tabella che conterrà le miniature
A8 ---> clipart  ...  nome per la cartella da indicare nei link alle immagini
A9 ---> tumbs  ...  nome per la cartella da indicare nei link alle miniature
A10 ---> foto_origine.htm   ...  il nome della pagina master per l'immagine
A11 ---> <!--- immagine --->  ...  segnalibro per indicare dove inserire l'immagine grande
A12 ---> <!--- menu sinistro --->  ...  segnalibro per indicare dove è possibile inserire il "torna indietro"
A13 ---> <!--- menu destro --->  ...  segnalibro per indicare dove è possibile inserire il "vai avanti"
A14 ---> <a href="javascript:Centrata('pagina')"><img src="foto" alt="immagine" /></a>  ...  queste tre per facilitarci il compito nel creare i link necessari
A15 ---> <a href="javascript:Centrata('pagina')">vai</a>
A16 ---> <img src="immagine" alt="apri" />
A17 ---> C:\Programmi\EasyPHP\www\slidershow\dida  ...  la cartella delle didascalie
A18 ---> <!--- titolo --->  ...  segnalibro per indicare dove inserire la didascalia


Fatto questo abbiamo finito di lavorare sul foglio di Excel e siamo pronti a passare al VBA

Il lavoro da fare nel VBA lo vedremo nel prossimo post

 

mike
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Posted: 27 Jun, 2008 9:29:24 pm    
Profilo homepage email micdas

Prima di passare al VBA forse è meglio esaminare sommariamente le costanti scritte nel foglio.

Unica cosa da modificare obbligatoriamente sono le 4 costanti evidenziate in rosso e che debbono indicare con precisione l'esatta ubicazione della cartella principale e delle relative 3 sotto cartelle

Le due voci evidenziate in blu possono essere modificate

Le restanti voci (comprese le due evidenziate in grassetto nero) non possono essere modificate, a meno di andare a modificare anche il relativo codice che a loro si riferiscono

 

mike
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Posted: 28 Jun, 2008 9:01:13 am    
Profilo homepage email micdas

Il lavoro nel VBA
Nel codice abbiamo quattro blocchi principali di istruzioni:

Valorizzazione delle variabili di servizio
Lettura delle immagini dalla cartella clipart e memorizzazione in una matrice
Creazione delle pagine che debbono visualizzare le singole immagini
Creazione della pagina che deve contenere tutte le miniature

Anche in questo caso, per facilitare la comprensione delle varie routine VBA userò post separati per ognuno dei blocchi di istruzioni

 

mike
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Posted: 28 Jun, 2008 9:08:42 am    
Profilo homepage email micdas

valorizzazione della variabili di servizio

Questo è il lavoro più semplice:
viene creata una variabile diversa per ogni voce inserita nel foglio di lavoro, quindi non facciamo altro che leggere i contenuti del foglio dalla cella A1 alla A18:


Cartella = Range("A1") & "\"
CartellaImmagini = Range("A2") & "\"
CartellaTumbs = Range("A3") & "\"
FileMaster = Range("A4")
FileDest = Range("A5")
FotoMaster = Range("A10")
NumCol = Range("A6")
InserisciTabella = Range("A7")
Cartella_Clipart = Range("A8") & "/"
Cartella_Tumbs = Range("A9") & "/"
Inserisci_Immagine = Range("A11")
MenuSinistro = Range("A12")
MenuDestro = Range("A13")
LinkSuImmagine = Range("A14")
LinkSuTesto = Range("A15")
MettiImmagine = Range("A16")
Didascalia = Range("A17")
Dida = Range("A18")

 

mike
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Ultima modifica: micdas on 28 Jun, 2008 9:18:18 am
Posted: 28 Jun, 2008 9:15:34 am    
Profilo homepage email micdas

Lettura delle immagini dalla cartella "clipart"

Si inizia la prima parte del lavoro: dal disco fisso vengono letti tutti i files contenuti nella cartella "clipart" e vengono accettati solo i files con estensione .jpg e .gif.

Questi files vengono memorizzati in una matrice e ci accompagneranno in tutto il lavoro.

C1 = 0
File = Dir(CartellaImmagini)
Do While File <> ""
    Estensione = CercaEstensione(File)
    If LCase(Estensione) = LCase("jpg") Or LCase(Estensione) = LCase("gif") Then
        C1 = C1 + 1
        ReDim Preserve Immagini(1 To C1)
        Immagini(C1) = File
    End If
    File = Dir
Loop
If C1 = 0 Then
    MsgBox "Nessuna immagine trovata in " & vbCrLf & CartellaImmagini
    Exit Sub
End If


Se nella cartella non viene trovato alcun file che soddisfi le nostre aspettative viene inviato un messaggio ed il lavoro viene interrotto.

 

mike
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Ultima modifica: micdas on 28 Jun, 2008 4:58:11 pm
Posted: 28 Jun, 2008 1:08:19 pm    
Profilo homepage email micdas

Creazione delle pagine da visualizzare

Questa è la parte più impegnativa del codice.
In questo frammento di codice dobbiamo eseguire queste operazioni:
aprire un ciclo che legga i nomi dei files che abbiamo memorizzato nella matrice Immagini()
For C2 = 1 To C

aprire la pagina master in lettura:
Lu1 = FreeFile
Open FileOrigine For Input As Lu1


aprire o creare le pagine che dovranno ospitare le immagini
Lu2 = FreeFile
Open FileDestinazione For Output As Lu2


iniziare la lettura sequenziale di ciascuna riga del file master fino a quando non giungiamo la fine
Do While Not EOF(Lu1)
Line Input #Lu1, DataLine


Prima di scrivere la riga letta dalla pagina master nella pagina di destinazione occorre verificare che la riga letta non contenga uno dei segnaposti inseriti nella pagina master:
se il segnaposto è "<!--- menu sinistro --->" occorre valutare anche il contatore del ciclo:
se questo contatore ha un valore superiore ad 1 si può inserire l'immagine precedente a quella corrente e linkarla alla relativa pagina
altrimenti si scrive il messaggio che si è arrivati alla prima immagine

se il segnaposto è "<!--- menu destro --->" si valuta ancora il contatore del ciclo:
se questo contatore ha un valore inferiore al numero di immagini memorizzati nella matrice si può inserire l'immagine successiva a quella corrente e linkarla alla relativa pagina
altrimenti si scrive il messaggio che si è arrivati all'ultima immagine

se il segnaposto è "<!--- immagine --->" si provvede ad aggiustare la stringa "<img src="immagine" alt="apri" />" sostituendo la stringa "immagine" con il giusto indirizzo completo della immagine puntata dal contatore del ciclo

Se il segnaposto è "<h1>immagine</h1>" si provvede a sostituire la sottostringa "immagine" con la stringa "Immagine x d y"

Se il segnaposto è "<!--- titolo --->" le cose si complicano leggermente.
occorre aprire un nuovo canale (il terzo) per la lettura del file di testo relativo all'immagine che si sta leggendo
si legge il contenuto di questo file
si chiude il file appena aperto
si scrive il messaggio appena letto al posto del segnaposto

Se nessuna di queste condizioni si realizza si può procedere alla scrittura della riga letta dalla pagina master.

Dopo questa fase il restante codice è lievemente più semplice, ma, per comodità, lo vediamo nel prossimo post

 

mike
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Ultima modifica: micdas on 28 Jun, 2008 11:01:13 pm
Posted: 28 Jun, 2008 10:55:49 pm    
Profilo homepage email micdas

Attachment: slidershows.zip (Downloaded 9 times)

Il Post che segue è la conclusione di questo tutorial

 

mike
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Posted: 28 Jun, 2008 10:58:38 pm    
Profilo homepage email micdas

Attachment: slidershows.zip (Downloaded 8 times)

Creazione della pagina delle miniature

Questa fase è più semplice della precedente.
C'è un solo segnaposto da controllare: quello per l'inserimento della tabella in cui collocare le miniature.

Quando incontriamo il segnaposto "<!---Inserisci tabella --->" si inizia la scrittura dei tag della tabella tenendo conto del numero di colonne impostate nel foglio e memorizzato nella variabile NumCol

In questo frammento di codice è interessante il modo usato per scrivere i tag:
<table class="tabellaimmagini">
<th colspan="5">

per inserire nella stringa anche i caratteri di doppio apice:
Print #Lu2, "<table class=""tabellaimmagini"">"
Print #Lu2, "<th colspan=""" & NumCol & """>";


Nella prima istruzione è necessario scrivere una coppia di doppi apici prima e dopo la stringa tabellaimmagini.
Nella seconda istruzione è necessario scriverne 3 di doppi apici prima e dopo la variabile NumCol per ottenere la stringa giusta.

Questo che segue è ovviamente solo un frammento di codice scritto per tutto l'applicativo ed è quello relativo alla creazione della tabella nella pagina che ospiterà le miniature.

Non esamino in questa sede tutto il codice che lascio allo studio dei più volenterosi rimanendo comunque a disposizione per dare delucidazioni a chi ne facesse richiesta.

Tuttavia penso sia meritevole di uno sguardo il codice usato per costruire la tabella.
If DataLine = InserisciTabella Then
Print #Lu2, "<table class=""tabellaimmagini"">"
Print #Lu2, "<tr>"
Print #Lu2, "<th colspan=""" & NumCol & """>";
Print #Lu2, "Elenco immagini"; "</th>"
Print #Lu2, "</tr>"
Print #Lu2, "<tr>"
For R1 = 1 To C
Print #Lu2, "<td>";
Temp1 = Replace(LinkSuImmagine, "pagina", NomeImmagine(Immagini(R1)) & ".htm")
Temp1 = Replace(Temp1, "foto", Cartella_Tumbs & Immagini(R1))
Print #Lu2, Replace(Temp1, "immagine", R1 & " di " & C)
Print #Lu2, "<br />" & Immagini(R1) & "</td>"
C1 = C1 + 1
If C1 > NumCol Then
Print #Lu2, "</tr><tr>"
C1 = 1
End If

Next
If C1 < NumCol Then
For C2 = C1 To NumCol
Print #Lu2, "<td>&nbsp;</td>"
Next
End If
Print #Lu2, "</tr></table>"
Else
Print #Lu2, DataLine
End If


In questo codice, per disegnare il numero esetto di celle per rfiga ci facciamo aiutare dalle variabili "C1 e NumCol .
Quando il C1 raggiunge il valore uguale a NumCol chiudiamo il tag </tr> e ne apriamo un altro e riportiamo C1 ad 1.

Nel file zip che allego sono contenuti i seguenti files e cartelle:
foto_origine.htm che è la pagina master per creare le pagine per ospitare la singola immagine
slide_origine.htm che è la pagina master per creare la pagina che ospiterà le miniature
funzioni_js.js con lo script per aprire le pagine in una popup
stile.css per la formattazione delle pagine
una cartella "clipart" vuota
una cartella "dida" vuota
una cartella "images" con un bannerino usato nel CSS
una cartella "tumbs" vuota

Ripeto ancora come riempire le tre cartelle vuote:
scegliete le immagini che volete usare per lo slidershow e mettetele nelle 3 cartelle vuote ("clipart", "dida", "tumbs")
con un programma di fotoritocco aprite le immagini contenute nella cartella "tumbs" per ridimensionarle opportunamente
ai files che avete messo nella cartella "dida" cambiate la estensione in ".txt"

 

mike
 micdas
 Moderatore Excel

 Posts: 35
 Registrato il:
   24-02-2008



Posted: 28 Jun, 2008 11:18:51 pm    
Profilo homepage email micdas

Dimenticavo di mostrare a chi ha fretta di vedere il risultato di quanto ho ottenuto col VBA.

Provate a dare un'occhoata a questa pagina

 

mike
 admin
 Nina


 Posts: 60
 Registrato il:
   23-02-2008

 MSN: ninagraphic@hotmail.it  



Posted: 29 Jun, 2008 11:43:21 pm    
Profilo homepage email admin

uhau ma che bel tutorial appena ho un attimo di tempo mi studio il tutto e lo provo

 

Nina...

1

  

 Powered by UPB Version : 2.1.1b | Template by: Nina art & graphics ~ Loretta B. ©2007/2008 pagina generata in 0.08701 seconds PHP Outburst ©2002 - 2009

www.myupb.com