VBA XLS - Appunti di INFORMATICA

Transcript

VBA XLS - Appunti di INFORMATICA
Brescianet.com
Sito didattico - Prof. Sechi Marco
FAQ
Profilo
Cerca
Lista degli utenti
Non ci sono nuovi messaggi
Gruppi utenti
Esci [ e01692 ]
Contenuti del corso
Indice del forum -> Corso Pomeridiano
Argomento precedente :: Argomento successivo
Autore
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 212
Messaggio
Inviato: 16 Feb 2005 11:18 pm
Soggetto: Contenuti del corso
Clicca qui per vedere gli appunti del corso
Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 212
Inviato: 25 Feb 2005 12:56 pm
Soggetto: 18/02/2005
Introduzione alla programmazione ad oggetti
Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Inviato: 25 Feb 2005 03:06 pm
batch files
Soggetto: 25/02/2005
Messaggi: 212
wsf ==> linguaggio vb like che consente di programmare anche il sistema operativo
comctl32.dll
comdlg32.dll (finestre comuni: es. selezione dei file)
le costanti di tipo stringa vanno delimitate con il doppio apice
"caio" <> caio
"ciao"+" pluto"==> "ciao pluto" (concatenazione)
"ciao "+1 <> "ciao "+"1"
"ciao "+1 ==> errore
cstr(argomento) ==> converte l'argomento in stringa
cstr(11) ==>"11"
costruire su un nuovo foglio un textbox che visualizzi al suo interno le coordinate della posizione del mouse quando passa il cursore su un
bottone - Il colore del bottone deve diventare verde:
Soluzione
Private Sub BtnBottone_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Me.TxtCoordinate.Text = CStr(X) + " - " + CStr(Y)
Me.BtnBottone.BackColor = vbGreen
End Sub
colori rgb
numero = r+g*256+b*(256*256)
======
ActiveWorkbook ==> oggetto che identifica la cartella di lavoro corrente
ActiveworkSheet ==> oggetto che identifica il foglio di lavoro corrente
Private Sub BtnCopiaDaFogliDiversi_Click()
ActiveWorkbook.Worksheets("Foglio3").Cells(1, 1) = ActiveWorkbook.Worksheets("Foglio1").Cells(1, 1)
End Sub
=====
copiare dalla cella A1 del primo foglio della cartella pippo.xls nell'ultimo foglio della cartella pluto.xls (cella A1) ==> worksheets.count ==>
nr fogli - La numerazione va da 0 a count-1
Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 212
Inviato: 04 Mar 2005 03:03 pm
Soggetto: 4/3/2005
ActiveWorkbook.Worksheets("Pippo").Cells(1, 1)
ActiveWorkbook.Worksheets("Pluto").Cells(1, 1)
ActiveWorkbook.Worksheets(0).Cells(1, 1)
ActiveWorkbook.Worksheets(2).Cells(1, 1)
Questo secondo metodo è sensibile alle variazioni che l'utente potrebbe apportare alla cartella (esempio inserisce un nuovo foglio)
ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.count-1).Cells(1, 1)
nomi di collezioni di oggetti EXCEL
Workbooks
Worksheets
le collezioni hanno una proprietà: count che contiene il numero di elementi della collezione
-------------------Le variabili
non sono che zone di memoria che vengono identificate con un nome
Vengono così dichiarate
Dim <nome della variabile>
debug ==> Visualizzazione --> Finestra immediata --> print variabile
i commenti in VB si ottengongono mettendo il singolo Apice all'inizio
Il commento serve al programmatore per spiegare il significato (semantica) del programma
for contatore=<valore iniziale> to <valore finale> [step <passo>]
istruzioni iterate
next
ESEMPIO 1.a
for i=1 to 10
cells(i,1)=i
next
Esempio 1.b
For i = 10 To 1 Step -1
MsgBox CStr(i)
Next
Esempio 1.b
For i = 2 To 20 Step 2
cells(i,1)=i
Next
Esempio 2 - Calcolo MEDIA
-------------------------------------Dim i,s
' <inizializzazione-input>
s=0
' <risolvo il problema - algoritmo>
' da uno a cinque
For i = 1 To 5
' chiedo l'i-esimo valore Xi
x = InputBox("dammi un numero:", "lettura numero", i)
' Aggiungo il valore Xi alla somma dei valori precedentemente letti
s=s+x
Next
' <output>
Esempio 3 - Scomposizione parola
mid(<Stringa>,<DaDove>[,<Quanti caratteri>])
mid(s,i,1) ==> i-esimo carattere
mod(s,1,3) ==> primi 3 caratteri di s
mid("Arrivederci",5) ==> vederci
Il 3* argomento se omesso ==> implica dal punto indicato nel 2° argomento in poi
Private Sub Btnscomponi_Click()
Dim s, i
'<init>
s = Cells(1, 1)
' da i=1 alla lunghezza della parola
For i = 1 To Len(s)
' mi posiziono sull'i-esimo carattere
' estrarre e poi copiare nella i+1 cella
Cells(i + 1, 1) = Mid(s, i, 1)
Next
End Sub
--------------------------------Esercizio 1
costruire l'esempio 3 però fornendo la sequenza in maniera ribaltata
(far vedere due metodi)
Esercizio 2
costruire una prg che scriva in celle adiacenti verticalmente la sequenza dei primi numeri pari. N è richiesto mediante una inputbox
Esercizio 3
costruire una prg che ricomponga una parola di 10 lettere. Le singole lettere vvengono acquisite in maniera invertita mediante una inputbox
Esercizio 4
costruire una prg che scriva in celle adiacenti verticalmente la sequenza 1, -1, 1, -1 .. . Il numero di termini N è richiesto mediante una
inputbox
Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 212
Inviato: 11 Mar 2005 03:00 pm
Soggetto: 11/03/2005
Esercizio 4
costruire una prg che scriva in celle adiacenti verticalmente la sequenza 1, -1, 1, -1 .. . Il numero di termini N è richiesto mediante una
inputbox
-------------------La stringa vuota ==> "" (doppio apice doppio apice ovvero virgolettevirgolette)
dichiarazione dei tipi delle variabili
esempio
dim x as long
long, byte, integer ==> sono numerici interi
dim Eta as byte
double single ==> numeri decimali - la precisione li differenzia
Dim Importo as double
dim promosso as boolean ==> assume solo due valori: vero o falso
Dim NatoIl as Date
dim x
è equivalente a
dim x as variant
Esercizio 3
costruire una prg che ricomponga una parola di 10 lettere. Le singole lettere vvengono acquisite in maniera invertita mediante una inputbox
------------------------------Dim s As String
s = ""
For i = 4 To 1 Step -1
c = InputBox("Dammi la " & i & "° lettera", "", "")
s=c+s
Next
MsgBox s
Construtto decisionale o Selettivo IF
----------------------------------------IF (condizione_1) THEN
CodiceVBA_1
[elseif (Condizione_2) then
CodiceVBA_2
...
elseif (Condizione_j) then
CodiceVBA_j
...
ELSE
CodiceVBA_n]
END IF
CodiceVBA_n VERRà ESEGUITA SE TUTTE LE ALTRE CONDIZIONI SONO FALSE
Tra N possibilità ci consente di eseguirne una sola
IF (Eta>=18) THEN
msgbox "Sei Maggiorenne"
elseif (Eta<14) THEN
msgbox "Sei Minorenne"
else
msgbox "Non sei Maggiorenne"
end if
' Byte è un tipo numerico intero che va da 0 a 255 ==> 0-->2^8-1
Dim N As Byte
Dim i As Byte
Dim segno As Long
Dim Dato
Dato = InputBox("Dammi la lunghezza della sequenza", "Richiesta di N", 0)
If IsNumeric(Dato) Then
If Dato <= 255 And Dato >= 1 Then
segno = 1
N = Dato
For i = 1 To N
Cells(i, 1) = segno
segno = -segno
Next
Else
MsgBox "Valore fuori dal range ammesso per il tipo byte!", vbCritical, "Operazione annullata"
End If
Else
MsgBox "Non hai scritto un numero!!!", vbCritical, "Errore"
End If
-------------------condizioneA OR CondizioneB ==> Vera se una delle due è vera
condizioneA AND CondizioneB ==> Vera tutte e due sono vere
NOT condizioneA ==> Vera se la CondizioneA è falsa
-------------------Operatori di confronto
<> ==> diverso
=, > >= < <=
A=X ==> NOT (A<>X)
--------------------Rettangolo ==> vertici (a,b) (angolo sin alto) (c,d) angolo in basso
(CondA AND CondB) AND CondC ==> CondA AND CondB AND CondC
Esercizio 1
-----------Costruire un prg che determina se un punto x,y (coordinate richieste mediante input box) risulti dentro, sul perimetro, esterno alla
circonferenza con centro 0,0 e raggio 3
Esercizio 2
-----------Costruire un prg che determina se un punto x,y (coordinate richieste mediante input box) risulti esterno od interno alla circonferenza con
centro 0,0 e raggio 3 - Qualora il punto risultasse interno stabilire il quadrante di appartenenza (numerazione antioraria partendo da quello
con x e y positivi
Esercizio 3 (promemoria per il profe)
-----------Costruire un prg che determina se un punto x,y (coordinate richieste mediante input box) risulti a nord, sud , ovest est
Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 212
Inviato: 18 Mar 2005 02:51 pm
Soggetto: 18/03/2005 - Pomeriggio
y=f(x)
f(x)=x^2+2x+1
function f(x) as double
f=x*x+2*x+1
end function
per VBA double identifica un numero con la virgola
Function NomeFunzione(elenco argomenti) as tipo valore restituito
Istruzioni in VBA necessarie per il calcolo della soluzione
' restituisco il valore assegnando al nome della funzione il valore che si
' intende restituire
NomeFunzione=<Valore restituito>
end function
Function Quadrato(x) as double
Dim y as double
' Calcoli
y=x*x
' restituzione
Quadrato=y
End Function
mettere public davanti alla parola Function (in generale può essere posto dabvandi a qualsiasi oggetto) consente di rendere quell'oggetto
visibile ovunque nel nostro file di Excel
' Soluzione esercizio 1
Public Function CalcoloPosizioneNelCerchio3(x As Double, y As Double) As String
Dim Risposta As String
If ((x * x + y * y) = 9) Then
Risposta = "Sei sul perimetro del cerchio di raggio 3"
ElseIf ((x * x + y * y) < 9) Then
Risposta = "Sei dentro al cerchio di raggio 3"
Else
Risposta = "Sei fuori dal cerchio di raggio 3"
End If
' Restituzione valore
CalcoloPosizioneNelCerchio3 = Risposta
End Function
In Alternativa potevo scrivere
Public Function CalcoloPosizioneNelCerchio3(x As Double, y As Double) As String
If ((x * x + y * y) = 9) Then
CalcoloPosizioneNelCerchio3 = "Sei sul perimetro del cerchio di raggio 3"
ElseIf ((x * x + y * y) < 9) Then
CalcoloPosizioneNelCerchio3 = "Sei dentro al cerchio di raggio 3"
Else
CalcoloPosizioneNelCerchio3 = "Sei fuori dal cerchio di raggio 3"
End If
End Function
In Alternativa potevo scrivere
Public Function CalcoloPosizioneNelCerchio3(x As Double, y As Double) As String
If ((x * x + y * y) = 9) Then
CalcoloPosizioneNelCerchio3 = "Sei sul perimetro del cerchio di raggio 3"
Exit Function
End If
If ((x * x + y * y) < 9) Then
CalcoloPosizioneNelCerchio3 = "Sei dentro al cerchio di raggio 3"
Exit Function
End If
CalcoloPosizioneNelCerchio3 = "Sei fuori dal cerchio di raggio 3"
End Function
Exit Function ternmina l'esecuzione della funzione
L'ultima istruzione non è sottoposta ad IF poichè arriverò a quella istruzione solo
se i due precedenti IF sono risultati falsi
======================================
FUNZIONI RELATIVE ALLE STRINGHE
======================================
Left(stringa,n) ==> restituisce i primi n caratteri di stringa
Right(stringa,n) ==> restituisce gli ultimi n caratteri di stringa
mid(stringa, i, n) ==> restituisce partendo dall'iesimo carattere n caratteri di stringa
mid(s,4,1) ==> restituisce il 4 carattere
se n è omesso restituirà dall'i-esimo carattere in poi
mid("Mario Rossi",7) ==> "Rossi"
Il conteggio dei caratteri parte da 1
len(stringa) ==> lunghezza in caratteri della stringa
instr(stringa,stringacercata) ==> restituisce la posizione della stringacercata all'interno della stringa
ma restituisce 0 se la stringacercata non è presente in stringa
instr("Mario Rossi"," ") ==> 6
trim(stringa) ==> elimina gli spazi iniziali e finali
long indica una variabile intera compresa tra +/- 2^31
Se scrivo If su un'unica linea posso omettere end if
If pos = 0 Then x=1 else x=2
----------------------------------------Esempio separazione Nome dal Cognome
Public Function Cognome(s As String) As String
Dim pos As Long
pos = InStr(s, " ") + 1
If pos = 0 Then
Cognome = s
Else
Cognome = Trim(Mid(s, pos))
End If
End Function
Public Function MioNome(s As String) As String
Dim pos As Long
MioNome = ""
pos = InStr(s, " ")
If pos = 0 Then Exit Function
MioNome = Trim(Left(s, pos - 1))
End Function
--------------------Attenzione: per far funzionare i prg occcorre aggiungere alla mia cartella un modulo (nella IDE di VBA)
-------------------If ((x * x + y * y) <= 9) Then
dentro = True
else
dentro = False
End If
Oppure
dentro = False
If ((x * x + y * y) <= 9) Then
dentro = True
End If
Oppure
dentro = ((x * x + y * y) <= 9)
--------------------------------ESEMPIO DEI QUADRANTI
--------------------------------Public Function CalcoloQuadranteelCerchio3(x As Double, y As Double) As String
Dim dentro As Boolean
dentro = ((x * x + y * y) <= 9)
' IV°Q | I Q
' --------+--------' III°Q | II° Q
If dentro Then
If x > 0 And y > 0 Then
CalcoloQuadranteelCerchio3 = "I° Quadrante"
ElseIf x > 0 And y < 0 Then
CalcoloQuadranteelCerchio3 = "II° Quadrante"
ElseIf x < 0 And y < 0 Then
CalcoloQuadranteelCerchio3 = "III° Quadrante"
ElseIf x < 0 And y > 0 Then
CalcoloQuadranteelCerchio3 = "IV° Quadrante"
Else
CalcoloQuadranteelCerchio3 = "Spicchio non valutabile"
End If
Else
CalcoloQuadranteelCerchio3 = "Spicchio non valutabile"
End If
End Function
1) Costruire una funzione che restituisce le radici del polinomio di 2° grado
a*x^2+b*x+c=0
x1=Radice(a,b,c,1)
x2=Radice(a,b,c,2)
-b+Radice(b^2-4ac)
x1=-----------------2a
-b-Radice(b^2-4ac)
x2=-----------------2a
2) Funzione che accetta 4 numeri e restituisce il minimo
3) Funzione che accetta 4 numeri e restituisce il massimo
---Inizio spiegazione For
Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 212
Inviato: 01 Apr 2005 01:52 pm
Soggetto: 1/4/2005
double - tipo numerico con le virgole (numero reale) di ottima precisione
byte --> 0..255 (intero)
booleano ==> vero o falso
cstr(12.234) ==> "12,234"
Una variabile dichiarata dentro una funzione è visibile solo all'interno della funzione stessa. Terminata la funzione le variabili locali vengono
deallocate(lo spazio di memoria occupato viene liberato per ulteriori nuove variabili)
se scrivo
NomeFuunzione=<Valore> la nostra funzione retituirà <valore>
NotOK= (cells(1,2)="")
l'espressione (cells(1,2)="") a destra dell'assegnamento va intesa come confronto: è vera se la cella B1 è vuota
DEBUGGING
=================================================
debug ==> controllo del codice
breakpoint ==> punto di interruzione del codice - il prg quando incontra un breakpoint si ferma consentendo al programmatore una serie di
operazioni di controllo - per rimuovere un brealpoint mi basta ricliccarci su - Il prg si interrompe se e solo se la sequenza di esecuzione delle
istruzioni passa di li
F8 ==> eseguo una istruzione alla volta
F5 prosegue l'esecuzione fino al prossimo breakpoint
la freccia gialla di esecuzione può essere spostata consentendo la ripeetizione o l'esclusione di porzioni di codice
SHIFT-F8 ==> se eseguito sopra una procedura la esegue in toto (contrariamente a F8 non entra: è utile se già sapete che quella funzione
è corretta)
FINESTRA IMMEDIATA: la richiamo con ctrl-G - tramite print <nomeVariabile> testo il contenuto
Funzione Calcolo radici polinomio di 2^ e 1^ grado
===========================================================
Function Radice(a As Double, b As Double, c As Double, QualeParametro As Byte) As String
Dim delta As Double
Radice = ""
If (a = 0) Then
' equazione di 1^ grado
If b = 0 Then
' semplice uguaglianza
If c = 0 Then
If QualeParametro = 1 Then
Radice = "Semplice uguaglianza 0=0"
End If
Else
Radice = "uguaglianza assurda" + CStr(c) + "=0"
End If
Else
If QualeParametro = 1 Then
Radice = CStr(-c / b)
End If
End If
Else
' equazione di 2^ grado
delta = b * b - 4 * a * c
If delta = 0 Then
Radice = CStr(-b / 2 * a)
ElseIf delta < 0 Then
If QualeParametro = 1 Then
Radice = CStr(-b / 2 * a) & "+" & CStr(Sqr(-delta) / 2 * a) & "*i"
Else
Radice = CStr(-b / 2 * a) & "-" & CStr(Sqr(-delta) / 2 * a) & "*i"
End If
Else
If QualeParametro = 1 Then
Radice = CStr((-b + Sqr(delta)) / 2 * a)
Else
Radice = CStr((-b - Sqr(delta)) / 2 * a)
End If
End If
End If
End Function
.....
Private Sub btnCalcolaRadici_Click()
Dim NotOK As Boolean
NotOK = (Cells(1, 2) = "") Or Not IsNumeric(Cells(1, 2))
NotOK = NotOK Or (Cells(2, 2) = "") Or Not IsNumeric(Cells(2, 2))
NotOK = NotOK Or (Cells(3, 2) = "") Or Not IsNumeric(Cells(2, 2))
If NotOK Then
MsgBox "Digita i parametri a,b, c", vbCritical, "Operazione annullata"
Else
Cells(6, 2) = Radice(Cells(1, 2), Cells(2, 2), Cells(3, 2), 1)
Cells(7, 2) = Radice(Cells(1, 2), Cells(2, 2), Cells(3, 2), 2)
End If
End Sub
Function MS_Minimo(a, b, c, d) As Double
MS_Minimo = a
If MS_Minimo > b Then
MS_Minimo = b
End If
If MS_Minimo > c Then
MS_Minimo = c
End If
If MS_Minimo > d Then
MS_Minimo = d
End If
End Function
Function Ms_Massimo(a, b, c, d) As Double
Ms_Massimo = a
If Ms_Massimo < b Then
Ms_Massimo = b
End If
If Ms_Massimo < c Then
Ms_Massimo = c
End If
If Ms_Massimo < d Then
Ms_Massimo = d
End If
End Function
----------------------------------------------------------------------
Function MS_minimoFor(NrValori As Long) As Double
MS_minimoFor = Cells(1, 2)
For i = 2 To NrValori
If (MS_minimoFor > Cells(i, 2)) Then
MS_minimoFor = Cells(i, 2)
End If
Next
End Function
Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 212
Inviato: 08 Apr 2005 01:59 pm
Soggetto: 08/04/2005
i mod j ==> resto della divisione di i per j
cella.Interior.Color colore di sfondo della cella
Genero un numero intero appartenente all'intervallo
[Limiteinf , Limitesup ]
Int((Limitesup - Limiteinf + 1) * Rnd + Limiteinf)
. indica la cartella corrente
call PulisciAreaCelle(ActiveWorkbook.sheets("Foglio1"),10,10,1,1)
call PulisciAreaCelle(ActiveWorkbook.sheets("Foglio1"),10,10)
Nelle definizione di una funzione (o sub) alcuni argomenti appaiono
con le [] allora questi sono opzionali
Quando un parametro opzionale è omesso allora questo prenderà un valore predefinito specificato nella semantica stessa della funzione
instr("ciao a tutti"," ")==> 5
instr(6, "ciao a tutti"," ")==> 7
l'oggetto me indica l'oggetto contenitore
=====================================================
Modulo MS_LIB_EXCEL
=====================================================
Sub ResetFoglio(ws As Worksheet, w As Long, h As Long)
Dim area As Range
Dim x As Range
Application.ScreenUpdating = False
ws.Select
ws.Columns.Select
Selection.ColumnWidth = 2.5
ws.Rows.RowHeight = 18
ws.Cells.ClearContents
ws.Cells.Borders.LineStyle = xlNone
ws.Cells.Interior.ColorIndex = 2 ' bianco
ActiveWindow.DisplayGridlines = False
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayZeros = False
Set area = ws.Range(ws.Cells(1, 1), ws.Cells(w, h))
area.Borders(xlEdgeLeft).LineStyle = xlDot
area.Borders(xlEdgeTop).LineStyle = xlDot
area.Borders(xlEdgeBottom).LineStyle = xlDot
area.Borders(xlEdgeRight).LineStyle = xlDot
area.Borders(xlInsideHorizontal).LineStyle = xlDot
area.Borders(xlInsideVertical).LineStyle = xlDot
area.Borders(xlEdgeLeft).ColorIndex = 5
area.Borders(xlEdgeTop).ColorIndex = 5
area.Borders(xlEdgeBottom).ColorIndex = 5
area.Borders(xlEdgeRight).ColorIndex = 5
area.Borders(xlInsideHorizontal).ColorIndex = 5
area.Borders(xlInsideVertical).ColorIndex = 5
Application.ScreenUpdating = True
End Sub
Public Sub PulisciAreaCella(ws As Worksheet, w As Long, h As Long, Optional l As Long = 1, Optional t As Long = 1)
For r = 1 To h
' pulisco la riga r-esima
For c = 1 To w
' pulisco la singola cella di colonna c sulla riga r
ws.Cells(r, c) = ""
Next
Next
End Sub
=====================================================
Foglio Pitagora
=====================================================
Private Sub BtnCreaTabellone_Click()
Dim Wsa As Worksheet
Dim r As Long
Dim c As Long
On Error Resume Next
Worksheets("Pitagora").Delete
On Error GoTo 0
r = Worksheets("Parametri").Cells(1, 2)
c = Worksheets("Parametri").Cells(2, 2)
Set Wsa = ActiveWorkbook.Worksheets.Add
Wsa.Name = "Pitagora"
Call MS_Lib_Excel.ResetFoglio(Wsa, r, c)
' Set wsa = ActiveWorkbook.Worksheets(0)
Call MS_Lib_Excel.PulisciAreaCella(Wsa, r, c)
' in alternativa
'MS_Lib_Excel.PulisciAreaCella Me, 10, 10
End Sub
Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 212
Inviato: 15 Apr 2005 01:57 pm
Soggetto: 15/04/2005
if ==> construtto selettivo o condizionale
for ==> iterativo
while <condizione>
istruzioni VBA
wend
...
1) Controllo la condizione se è vera eseguo istruzioni VBA
altrimenti esco dal ciclo
"" ==> indica la stringa vuota
i = i + 1 ==> equivale ad incrementare di 1 la variabile i
i = i - 1 ==> equivale ad decrementare di 1 la variabile i
function NomeFunzione(parametro1 ,parametro2 , ...) as tipodatorestituito
IstruzioniVBA
NomeFunzione=<valore da restituire>
end function
Sub NomeSub(parametro1 ,parametro2 , ...)
IstruzioniVBA
end function
una function non è altro che una sub che restituisce un valore
una sub esegue delle operazioni basandosi sugli eventuali parametri passati
Double ==> numero reale con precisione alta
boolean ==> Tipo vero o falso (true o false)
Questa forma è utile quando la parte iterata può non essere eseguita
--------------------while condizione
IstruzioniIterate
wend
--------------------se la parte iterata deve essere eseguita almeno una volta dovete per forza scrivere
--------------------IstruzioniIterate
while condizione
IstruzioniIterate
wend
--------------------Se la parte iterata è consistente si ha una duplicazione molto alta di righe di codice che complica la manutenibilità del vs codice
Questa forma risulta moto utile quando devo eseguire almeno una volta le istruzioni iterate
--------------------do
IstruzioniIterate
Loop While Condizione
--------------------' #################################################
' Esempio con WHILE-WEND : si noti il nr di righe duplicate
' #################################################
Sub CalcolaMediaDiUnaSequenza()
Dim x As Double
Dim s As Double
Dim n As Long
' s= somma dei numeri
' n=quanti numeri sono stati digitati
' Definizione dell'inizializzazione
s=0
n=0
' 1) chiedere il valore x corrente
x = InputBox("Digita il valore corrente:", "0")
' 2) incremento s di x
s=s+x
' 3) incremento n di 1 se x<>0
If (x <> 0) Then
n=n+1
End If
While x <> 0
' parte iterata
' 1) chiedere il valore x corrente
x = InputBox("Digita il valore corrente:", "0")
' 2) incremento s di x
s=s+x
' 3) incremento n di 1 se x<>0
If (x <> 0) Then
n=n+1
End If
Wend
' avendo n ed s posso calcolare la media
If n <> 0 Then
MsgBox ("La Media è " + CStr(s / n))
Else
MsgBox "Sequenza vuota - media nulla!"
End If
End Sub
' #################################################
' FORMA ALTERNATIVA CON DO LOOP WHILE
' #################################################
Sub CalcolaMediaDiUnaSequenza()
Dim x As Double
Dim s As Double
Dim n As Long
s=0
n=0
Do
x = InputBox("Digita il valore corrente:", "0")
s=s+x
If (x <> 0) Then
n=n+1
End If
Loop While x <> 0
If n <> 0 Then
MsgBox ("La Media è " + CStr(s / n))
Else
MsgBox "Sequenza vuota - media nulla!"
End If
End Sub
-----------La funzione rnd genera un numero compreso tra 0 e 1
Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 212
Inviato: 22 Apr 2005 01:52 pm
Soggetto: 22/04/2005
excel: foglio elettronico
Access: database==> inserire i dati, ricercarli
caratterizzati da tabelle - ogni tabella è costituita da singoli campi - ogni tabella contiene delle schede (record)
Un archivio di una sola tabella può essere essere impostato con excel ==> colonne=cmpi righe=record
esempio di macro di ricerca in EXCEL
=CERCA.VERT(C16;Studenti!A2:D4;3;FALSO)
In Access un insieme di record si dice recordset
Il Currentdb è il DB corrente (il file MDB stesso che avete aperto) - L'azione openrecordset vi consente di collegarvi a quella tabella
rs.eof ==> proprietà del recordset che diventa vera dopo aver superato l'ultimo record
le applicazioni in windows sono dei server ole ovvero consentono tramite il copia ed incolla di far cooperare tra loro le applicazioni stesse
Public Function ScorriStudente()
Dim rs As Recordset
'apri la tabella
Set rs = CurrentDb.OpenRecordset("Studenti")
'vai sulla prima riga
rs.MoveFirst
'fintantochè non sono in fondo
Do While Not rs.EOF
' stampo il cognome
MsgBox rs("Cognome") + " " + rs("Nome")
' passo alla riga successiva
rs.MoveNext
Loop
'chiudo la tabella
rs.Close
End Function
----------------------------Ripetere lo scorrimento in excel - word e WSF
Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 212
Inviato: 29 Apr 2005 01:56 pm
Soggetto: 29/04/2005
Riferimenti: In windows\system ho le librerie di base del sistema WINDOWS - terminano con dll
Ad esempio in comdlg32.dll abbiamo tutte le funzioni che sovraintendono le finestre di dialogo standard: esempio la selezione di un file etc
Nel file MDAC 2.8 abbiamo tutte le routine di Windows che gestiscono l'accesso ai database
' ------------------------------------------------------------Esempio in Excel - l'estrema somiglianza del codice in EXCEL ed in ACCESS dipende dal fatto che sia Access che Excel gestiscono
l'accesso ai DB mediante lo stesso modulo DAO (o Ado)
' ------------------------------------------------------------Public Function ScorriStudente()
Dim rs As Recordset
Dim db As Database
'apri la tabella
' DBEngine è il punto di inizio del motore che gestisce i DB
Set db = DBEngine.OpenDatabase("Studenti.mdb")
Set rs = db.OpenRecordset("Studenti")
'vai sulla prima riga
rs.MoveFirst
i=1
'fintantochè non sono in fondo
Do While Not rs.EOF
' stampo il cognome
Worksheets("Studenti").Cells(i, 1) = rs("Cognome") + " " + rs("Nome")
i=i+1
' passo alla riga successiva
rs.MoveNext
Loop
'chiudo la tabella
rs.Close
End Function
Torna in cima
Mostra prima i messaggi di: Tutti i messaggi
Prima i vecchi
Indice del forum -> Corso Pomeridiano
Vai
Tutti i fusi orari sono GMT
Pagina 1 di 1
Controlla questo argomento
Vai a: Corso Pomeridiano
Puoi inserire nuovi argomenti in
Puoi rispondere agli argomenti in
Puoi modificare i tuoi messaggi in
Puoi cancellare i tuoi messaggi in
Puoi votare nei sondaggi in
Puoi moderare
Vai al Pannello di Amministrazione
Powered by phpBB 2.0.10 © 2001, 2002 phpBB Group
Vai
questo forum
questo forum
questo forum
questo forum
questo forum
questo forum

Documenti analoghi

4M - Appunti di INFORMATICA

4M - Appunti di INFORMATICA Brescianet.com Sito didattico - Prof. Sechi Marco FAQ Profilo

Dettagli

4N - Appunti di INFORMATICA

4N - Appunti di INFORMATICA If minore > b Then minore = b End If If minore > c Then minore = c End If If minore > d Then minore = d End If If minore > e Then minore = e End If

Dettagli

4M - Appunti di INFORMATICA

4M - Appunti di INFORMATICA Mid(s, i, 1) => i-esimo carattere della stringa s in VBA la sequenza For i = Len(s) To 1 Step -1 ' Mid(s, i, 1) => i-esimo carattere If Mid(s, i, 1) = "\" Then Exit For End If Next corrisponde a: b...

Dettagli