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
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
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...