INDICE
1 - TIPS & TRICKS
1.a) VBA: codice per andare all'ultimo record all'apertura di una maschera
1.b) VBA: codice per compattare e ripristinare il DB (NON FUNZIONA)
1.c) VBA: aggiorna utilizzando il codice che va a utilizzare il pulsante AGGIORNA sulla ribbon
2) VBA: inserire un VAI A CAPO (INVIO)
3) Azzerare un campo contatore
4) Trasformare il mouse in clessidra
5) N° campi presenti in una tabella dalla finestra immediata di Access
6) MsgBox con sceltra SI/NO/ANNULLA
7) Sintassi nella costruzione di un nome etichetta con variabile
8) Query per ottenere una colonna con un numero progressivo (DA VERIFICARE)
9) ACCESS 2013: visualizzare gli oggetti nascosti
10) Inserire un campo contatore progressivo in un report o query
11) Sintassi WHERE con campo DATA
12) Creare un sottoreport che si "formatta" in orizzontale
13) Proprietà colori campi etichette e textbox
14) Proprietà formattazione campi etichette e textbox
15) Personalizzare le impostazioni predefinite per i database
16) Definizione di una costante
17) Apertura applicazione con Shell
18) Esegui command01 da command02
19) Passare un recordset ad una funzione
2 - Esempio base ADO/DAO
3 - Invio e@mail di gruppo
4 - Riorganizzare il campo priorità di una sottotabella
5 - Invio e@mail singola
6 - Oggi si festeggia (ricorrenze all'aperture di Access)
7 - Copia dati in nuova tabella
8 - Quante volte ricorre un carattere in una stringa
9 - Dimensiona le colonne di una SSTAB
10 - Funzione GestioneLoghi(Me.Report.Name)
11 - Aprire il FORM Windows per sfogliare le cartelle e solezionare un file (PDF)
12 - Leggere dati da un foglio EXCEL collegato come tabella
13 - Abilita Maiuscolo
14 - Scrivendo un carattere nella cella VERDE nella ROSSA esce il corrispettivo n ASCII
15 - Contatori su FORM / Progressivo elaborazione
16 - Funzioni Nz, CtrlSeNULL, CtrlSeZERO, CtrlSeVUOTO, CtrlSeVUOTOeZERO
17 - Funzioni MASSIMO e MINIMO su un array
18 - Leggi dati da foglio EXCEL (.xlsx)
19 - Q_ZeroAlSecondoDecimale
20 - Inserire numero progressivo in query di ordinamento
21 - Funzione che ritorna più parametri
22 - Il comando LIKE nel codice VBA
23 - Assegnare via codice il recordsource
24 - Aprire un recordset su un'altro DB
25 - Form ricerca dati
26 - Collegare una tabella da codice (DAO)
27 - Eliminare una tabella da codice (DAO)
28 - Passare il nome della FORM ad una funzione
29 - Funzione GestPagIniFin("Nome_Report")
30 - CancellaRecord("NOME_TAB", "NOME_FORM", CP1, CP2)
31 - Gestione Data Estesa
32 - Copy file da un percorso ad un altro
33 - Assegnare permessi a cartelle - funzione icacls
34 - Query con nome tabella parametrizzato
35 - Scrivere in file Excel xlsx
36 - Apertura e chiusura file di testo (open)
37 - Lettura dati di un file di testo (input/Line Input)
38 - Scrittura dati in un File di testo (print/write)
39 - Esempi funzione timer
40 - Compatta e ripristina database
41 - Funzione collegata tabelle database anni diversi
42 - Copia campi tipo ALLEGATO
43 - Duplica record
44 - Set db [CurrentDb, OpenDatabase()]
45 - Errore Access: query danneggiata
46 - Trova record in FORMS/Vai al record
47 - Macro/Vba 32/64 bit
48 - Aprire DB Access da altro DB Access
49 - Funzione Sleep per ritardare esecuzione codice
S1 - Script1 - Cancellazione file e directory con più di N giorni
|
---|
BLOG ACCESS EXPERT (ENG) 10 errori database di Microsoft Access che influenzano le prestazioni Database multiutente in rete, ottimizzazione/query lato server MS Access code (Alessandro Baraldi) |
1 - TIPS & TRICKS 1.a) VBA: codice per andare all'ultimo record all'apertura di una maschera: DoCmd.RunCommand acCmdRecordsGoToLast 1.b) VBA: codice per compattare e ripristinare il DB (NON FUNZIONA): DoCmd.RunCommand acCmdCompactDatabase questo però sembra funzionare anche in ACCESS 2016: ' Menu Strumenti SendKeys "(%(S))", False ' Pulsante utilità database SendKeys "u", False ' Pulsante compatta e ripristina DB SendKeys "o", False 1.c) VBA: è come premere il pulsante AGGIORNA RECORD: DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70 2) VBA: inserire un VAI A CAPO (INVIO): Rst1!CAMPO1 & vbCrLf & Rst1!CAMPO2 3) ACCESS 2013: per azzerare un campo contatore si può svuotare la tabella e fare un COMPATTA E RIPRISTINA, oppure cancelare il campo contatore e ricrearlo 4) Trasformare il mouse in clessidra: Screen.MousePointer = 11 ' MOUSE CLESSIDRA Screen.MousePointer = 0 ' MOUSE NORMALE 5) Dalla finestra immediata di Access digitando: ?Currentdb.TableDefs("NOME_TABELLLA").Fields.Count mi da il totale dei campi contenuti PS: il programma deve essere in ESECUZIONE! 6) MsgBox con sceltra SI/NO/ANNULLA: Dim Messaggio, Stile, Titolo as String Messaggio = "RICHIESTA CHE VIENE MOSTRATA ALL'UTENTE" & Chr(13) Stile = vbYesNo + vbCritical + vbDefaultButton2 Titolo = "ATTENZIONE" Risposta = MsgBox(Messaggio, Stile, Titolo) If Risposta = vbYes Then ..... else exit sub end if 7) Sintassi nella costruzione di un nome etichetta con variabile: Me("PARTE_FISSA" & VARIABILE & "PARTE_FISSA").Caption Sintassi nella costruzione di un nome TABELLA con variabile: Rst1.Open "SELECT * FROM T_PARTE1_" & Rst2!T_PARTE2, CurrentProject.Connection, adOpenDynamic, adLockOptimistic se Rst2!T_PARTE2 = "TEST" selezionerò i record dalla tabella: T_PARTE1_TEST 8) Query per ottenere una colonna con un numero progressivo. Nell'esempio partiamo dalla creazione di una tabella di test: CREATE TABLE test (id int, nome text); Inseriamo dei dati: INSERT INTO Test (Id, Nome) VALUES (9,"Ciccio"); INSERT INTO Test (Id, Nome) VALUES (5,"Pippo"); INSERT INTO Test (Id, Nome) VALUES (3,"Lillo"); E finalmente ecco la query per ottenere le due colonne più una terza colonna con un numero progressivo SELECT Id, Nome, (SELECT Count(*) + 1 FROM Test t2 WHERE t2.id < test.id) AS Progressivo FROM Test ORDER BY Id; Nella slide sotto l'esempio ricostruito sull'ACCESS 2013 Fatture.accdb: 9) ACCESS 2013: visualizzare gli oggetti nascosti: tasto destro sull'area sinistra in un posto vuoto sotto MODULI. Si apre la form: 10) Inserire un campo contatore progressivo in un report o query (per tabella vedi punto 8) 11) Sintassi WHERE con campo DATA "HAVING data >= #" & Forms!M_STAMPE!DAL & "# AND data <= #" & Forms!M_STAMPE!AL & "# AND ... 12) Creare un sottoreport che si "formatta" in orizzontale Per creare una situazione del genere non bisogna impostare NESSUNA proprietà ma aprire il report/sottoreport e selezionare il menù: si aprirà il form: dove impostiamo quante volte il sottoreport si ripeterà orizzontalmente (vedi ad es. report CRI) 13) Proprietà colori campi etichette e textbox BackColor = è il colore dello sfondo del controllo ForeColor = è il colore del testo del controllo Codici colori: vbYellow = 65535 vbRed = 255 vbBlue = 16711680 vbGreen = 65280 vbWhite = 16777215 vbBlack = 0 vbCyan = 16776960 vbMagenta = 16711935 14) Proprietà formattazione campi etichette e textbox il GRASSETTO è gestito dalla funzione: FontBold PS: la proprietà FontWeight, può essere utilizzata per impostare lo spessore della linea per il testo di un controllo. La proprietà FontBold consente di velocizzare l'applicazione del formato grassetto al testo, mentre la proprietà FontWeight semplifica la gestione dell'impostazione dello spessore della linea per il testo. il SOTTOLINEATO è gestito dalla funzione: FontUnderline l'ITALICO è gestito dalla funzione: FontItalic 15) Personalizzare le impostazioni predefinite per i database Sono parte delle Opzioni di Access. Di seguito il link dal supporto Office: link 16) Definizione di una costante Public Const PercorsoTXT = "C:\PERCORTO_TXT\" 17) Apertura applicazione con Shell ' ESEMPIO APERTURA PROGRAMMA CALCOLATRICE Call Shell("C:\Windows\WinSxS\wow64_microsoft-windows-calc_31bf3856ad364e35_10.0.17134.1_none_999337e4b8471fe2\CALC.EXE", 1) ' ESEMPIO APERTURA PROGRAMMA PROMPT DEL DOS Call Shell("C:\Windows\WinSxS\wow64_microsoft-windows-commandprompt_31bf3856ad364e35_10.0.17134.1_none_7ae1fd66b7e7b154\cmd.exe") 18) Esegui commando da un altro commando Se ad esempio voglio eseguire il Comando200 dal Comando300 nello stesso form: call Comando200_Click() su due form diversi faremo: call Forms("NOME_FORM").NomeComando_Click (NON FUNZIONA, da verificare) |
19) Passare un recordset ad una funzione
Public Function FUNZIONE(RST1 As Variant, RST2 As Variant, RST3 As Variant, .... (Vedi DB Demografici)
|
2 - Esempio base ADO/DAO
Function ADO()
Dim Rst1 As New ADODB.Recordset
Rst1.CursorLocation = adUseClient
Rst1.Open "NOME_TABELLA", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Rst1.MoveFirst
Rst1.Find "[NOME_CAMPO] = '" & Me.NOME_CAMPO & "'"
Me.NOME_CAMPO = Rst1![NOME_CAMPO]
Set Rst1 = Nothing
End Function
Function DAO1() Dim rs1 As Recordset, rs2 As Recordset Set rs1 = CurrentDb.OpenRecordset("NOME_TABELLA_1", dbOpenDynaset) Set rs2 = CurrentDb.OpenRecordset("NOME_TABELLA_2", dbOpenDynaset) rs1.MoveFirst rs2.MoveFirst While rs1.EOF = False rs2.MoveFirst rs2.FindFirst "CAMPO = '" & rs1![CAMPO] & "'" If rs2.NoMatch = True Then MsgBox "CAMPO = " & rs1!CAMPO End If rs1.MoveNext Wend rs1.Close rs2.Close End Function Function DAO2() Dim Schede As Recordset, Percorsi As Recordset, Anag As Recordset, Certificato As Recordset, NewDB As Database Dim Ultimo As Long Dim i As Integer Set Percorsi = CurrentDb.OpenRecordset("Select * from Percorsi", dbOpenSnapshot) Percorsi.MoveFirst Set Anag = CurrentDb.OpenRecordset("Select * from Anagrafe", dbOpenDynaset) ' LEGGO NEL CAMPO [SCHEDE] DELLA TABELLA [Percorsi], AD ES. CONTENTE IL VALORE: F:\PACCESS\Schede.mdb Set NewDB = OpenDatabase(Percorsi![Schede]) ' LA STRINGA DI CODICE SOPRA EQUIVALE ALLA STRINGA: Set NewDB = OpenDatabase("F:\PACCESS\Schede.mdb") Set Schede = NewDB.OpenRecordset("Select * from Schede Where (date() - DATA) = 8 AND VIDIM = TRUE ", dbOpenSnapshot) If Schede.RecordCount > 0 Then Schede.MoveFirst While Schede.EOF = False Set Certificato = CurrentDb.OpenRecordset("Select * from CPM Order By numero", dbOpenDynaset) Certificato.MoveLast Ultimo = certificato!numero Certificato.MoveFirst Certificato.FindFirst "Commessa = '" & Schede!commessa & "/" & Schede!Posizione & "'" If Certificato.NoMatch = False Then Certificato.Close GoTo .... Else Certificato.AddNew Certificato!Num = Ultimo + 1 Certificato!pag = 1 .... Certificato.Update Certificato.Close .... End Function |
3 - Invio di e@mail di gruppo
Public Function InvioMailGruppo()
Dim Rst1 As New ADODB.Recordset
Dim Rst2 As New ADODB.Recordset
Dim ListaIndEmail As String
Dim UltimoIndirizzo As Integer
Dim ContaIndirizzi As Integer
On Error GoTo Errori
Rst1.CursorLocation = adUseClient
Rst2.CursorLocation = adUseClient
Rst1.Open "SELECT * FROM [Q_Anag_x_invio_email] WHERE [INVIO_MAIL] = true", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Rst2.Open "T_CAMPI_MAIL", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
UltimoIndirizzo = Rst1.RecordCount
ContaIndirizzi = 1
ListaIndEmail = ""
Rst1.MoveFirst
While Not Rst1.EOF
If ContaIndirizzi = UltimoIndirizzo Then
ListaIndEmail = ListaIndEmail & Rst1!Numero
Else
ListaIndEmail = ListaIndEmail & Rst1!Numero & ";"
End If
ContaIndirizzi = ContaIndirizzi + 1
Rst1.MoveNext
Wend
DoCmd.SendObject , "", "", ListaIndEmail, , , Rst2!OGGETTO2, Rst2!Testo2, False, ""
Set Rst1 = Nothing
Set Rst2 = Nothing
Errori:
If Err.Number = 2293 Then
MsgBox ("Per inviare devi acconsentire")
Exit Function
End If
End Function
|
4 - Riorganizzare il campo priorità di una sottotabella
Public Function RiorganizzaPriorita()
Dim Rst1 As New ADODB.Recordset
Dim INCR_PRIORITA As Integer
Rst1.CursorLocation = adUseClient
Rst1.Open "SELECT * FROM ST1_TITOLO" & TitoloTab & " " & _
"WHERE ID_TP = " & Forms![01_M_PRINCIPALE].ID_TP & " ORDER BY PRIORITA", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
INCR_PRIORITA = 5
If Rst1.RecordCount > 0 Then Rst1.MoveFirst
While Not Rst1.EOF
Rst1!PRIORITA = INCR_PRIORITA
Rst1.Update
INCR_PRIORITA = INCR_PRIORITA + 5
Rst1.MoveNext
Wend
Forms![01_M_PRINCIPALE].Refresh
Set Rst1 = Nothing
End Function
|
5 - Invio e@mail singola
Public Function InviaMail(INDIRIZZO As String, Titolo As String, NOMINATIVO As String)
'DoCmd.SendObject , "", "", "morosini@insor.it", , , "Auguri di buon compleanno", "La Cooperativa Arcobaleno le porge i più sinceri auguri per il suo compleanno. ", False, ""
DoCmd.SendObject , "", "", INDIRIZZO, , , "Auguri!" & Titolo & " " & NOMINATIVO, "La Cooperativa Arcobaleno le porge i più sinceri auguri per il suo compleanno. ", False, ""
End Function
|
6 - Oggi si festeggia (ricorrenze all'aperture di Access)
Public Function OggiSiFesteggia2()
Dim Rst1 As New ADODB.Recordset
Dim GIORNO As String
Dim GIORNO1 As String
Dim GIORNO2 As String
Dim Mese As String
Dim Festeggiati As String
On Error GoTo Errori
Rst1.CursorLocation = adUseClient
GIORNO = Day(Date)
Mese = Month(Date)
' Se è Venerdì mostrami anche gli anniversari di Sabato e Domenica
If Weekday(Date) = 6 Then
If GIORNO = 27 And Mese = 2 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0227"" or MESE_GIORNO=""0228"" or MESE_GIORNO=""0301""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 29 And Mese = 4 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0429"" or MESE_GIORNO=""0430"" or MESE_GIORNO=""0501""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 29 And Mese = 6 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0629"" or MESE_GIORNO=""0630"" or MESE_GIORNO=""0701""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 29 And Mese = 9 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0929"" or MESE_GIORNO=""0930"" or MESE_GIORNO=""1001""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 29 And Mese = 11 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""1129"" or MESE_GIORNO=""1130"" or MESE_GIORNO=""1201""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 1 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0130"" or MESE_GIORNO=""0131"" or MESE_GIORNO=""0201""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 3 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0330"" or MESE_GIORNO=""0331"" or MESE_GIORNO=""0401""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 5 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0530"" or MESE_GIORNO=""0531"" or MESE_GIORNO=""0601""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 7 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0730"" or MESE_GIORNO=""0731"" or MESE_GIORNO=""0801""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 8 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0830"" or MESE_GIORNO=""0831"" or MESE_GIORNO=""0901""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 10 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""1030"" or MESE_GIORNO=""1031"" or MESE_GIORNO=""1101""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 12 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""1230"" or MESE_GIORNO=""1231"" or MESE_GIORNO=""0101""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 28 And Mese = 2 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0228"" or MESE_GIORNO=""0301"" or MESE_GIORNO=""0302""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 4 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0430"" or MESE_GIORNO=""0501"" or MESE_GIORNO=""0502""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 6 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0630"" or MESE_GIORNO=""0701"" or MESE_GIORNO=""0702""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 9 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0930"" or MESE_GIORNO=""1001"" or MESE_GIORNO=""1002""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 30 And Mese = 11 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""1130"" or MESE_GIORNO=""1101"" or MESE_GIORNO=""1202""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 31 And Mese = 1 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0131"" or MESE_GIORNO=""0201"" or MESE_GIORNO=""0202""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 31 And Mese = 3 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0331"" or MESE_GIORNO=""0401"" or MESE_GIORNO=""0402""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 31 And Mese = 5 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0531"" or MESE_GIORNO=""0601"" or MESE_GIORNO=""0602""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 31 And Mese = 7 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0731"" or MESE_GIORNO=""0801"" or MESE_GIORNO=""0802""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 31 And Mese = 8 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""0831"" or MESE_GIORNO=""0901"" or MESE_GIORNO=""0902""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 31 And Mese = 10 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""1031"" or MESE_GIORNO=""1101"" or MESE_GIORNO=""1102""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ElseIf GIORNO = 31 And Mese = 12 Then
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = ""1231"" or MESE_GIORNO=""0101"" or MESE_GIORNO=""0102""", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Else
If Len(Trim(Mese)) = 1 Then
Mese = "0" & Mese
End If
If Len(Trim(GIORNO)) = 1 Then
GIORNO = "0" & GIORNO
GIORNO1 = "0" & GIORNO + 1
If Len(GIORNO1) > 2 Then
GIORNO1 = GIORNO + 1
End If
GIORNO2 = "0" & GIORNO + 2
If Len(GIORNO2) > 2 Then
GIORNO2 = GIORNO + 2
End If
ElseIf Len(Trim(GIORNO)) = 2 Then
GIORNO = GIORNO
GIORNO1 = GIORNO + 1
If Len(GIORNO1) > 2 Then
GIORNO1 = Right(GIORNO + 1, 2)
End If
GIORNO2 = GIORNO + 2
If Len(GIORNO2) > 2 Then
GIORNO2 = Right(GIORNO + 2, 2)
End If
End If
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr WHERE MESE_GIORNO = '" & Mese & GIORNO & "' or _
MESE_GIORNO = '" & Mese & GIORNO1 & "' or MESE_GIORNO = '" & Mese & GIORNO2 & "'", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
End If
Else
If Len(Trim(Mese)) = 1 Then
Mese = "0" & Mese
End If
If Len(Trim(GIORNO)) = 1 Then
GIORNO = "0" & GIORNO
End If
Rst1.Open "SELECT * FROM Q_Ann_Comp_Ricorr_2 WHERE MESE_GIORNO = '" & Mese & GIORNO & "'", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
End If
Festeggiati = ""
If Rst1.RecordCount > 0 Then
Rst1.MoveFirst
End If
While Not Rst1.EOF
' SE IL GIORNO DELLA SETTIMANA E' VENERDI' (WEEKDAY=6)
If Weekday(Date) = 6 Then
Festeggiati = Festeggiati & "Il " & Rst1![GIORNO] & " " & Rst1![Mese] & ": " & Rst1![COSA_FESTEGGIANO] & " di " & Rst1![NOMINATIVO] & Chr(13)
'Festeggiati = Festeggiati & AggiuntaGiorniOre
Rst1.MoveNext
Else
Festeggiati = Festeggiati & Rst1![COSA_FESTEGGIANO] & " di " & Rst1![NOMINATIVO] & Chr(13)
'Festeggiati = Festeggiati & AggiuntaGiorniOre
Rst1.MoveNext
End If
Wend
If Rst1.RecordCount <> 0 And Weekday(Date) = 6 Then
If GIORNO = 27 And Mese = 2 Then
MsgBox ("Oggi Venerdi 27 febbraio, domani Sabato 28 febbraio e Domenica 1 marzo si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 29 And Mese = 4 Then
MsgBox ("Oggi Venerdi 29 aprile, domani Sabato 30 aprile e Domenica 1 maggio si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 29 And Mese = 6 Then
MsgBox ("Oggi Venerdi 29 giugno, domani Sabato 30 giugno e Domenica 1 luglio si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 29 And Mese = 9 Then
MsgBox ("Oggi Venerdi 29 settembre, domani Sabato 30 settembre e Domenica 1 ottobre si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 29 And Mese = 11 Then
MsgBox ("Oggi Venerdi 29 novembre, domani Sabato 30 novembre e Domenica 1 dicembre si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 1 Then
MsgBox ("Oggi Venerdi 30 gennaio, domani Sabato 31 gennaio e Domenica 1 febbraio si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 3 Then
MsgBox ("Oggi Venerdi 30 marzo, domani Sabato 31 marzo e Domenica 1 aprile si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 5 Then
MsgBox ("Oggi Venerdi 30 maggio, domani Sabato 31 maggio e Domenica 1 giugno si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 7 Then
MsgBox ("Oggi Venerdi 30 luglio, domani Sabato 31 luglio e Domenica 1 agosto si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 8 Then
MsgBox ("Oggi Venerdi 30 agosto, domani Sabato 31 agosto e Domenica 1 settembre si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 10 Then
MsgBox ("Oggi Venerdi 30 ottobre, domani Sabato 31 ottobre e Domenica 1 novembre si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 12 Then
MsgBox ("Oggi Venerdi 30 dicembre, domani Sabato 31 dicembre e Domenica 1 gennaio si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 28 And Mese = 2 Then
MsgBox ("Oggi Venerdi 28 febbraio, domani Sabato 1 marzo e Domenica 2 marzo si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 4 Then
MsgBox ("Oggi Venerdi 30 aprile, domani Sabato 1 maggio e Domenica 2 maggio si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 6 Then
MsgBox ("Oggi Venerdi 30 giugno, domani Sabato 1 luglio e Domenica 2 luglio si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 9 Then
MsgBox ("Oggi Venerdi 30 settembre, domani Sabato 1 ottobre e Domenica 2 ottobre si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 30 And Mese = 11 Then
MsgBox ("Oggi Venerdi 30 novembre, domani Sabato 1 dicembre e Domenica 2 dicembre si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 31 And Mese = 1 Then
MsgBox ("Oggi Venerdi 31 gennaio, domani Sabato 1 febbraio e Domenica 2 febbraio si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 31 And Mese = 3 Then
MsgBox ("Oggi Venerdi 31 marzo, domani Sabato 1 aprile e Domenica 2 aprile si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 31 And Mese = 5 Then
MsgBox ("Oggi Venerdi 31 maggio, domani Sabato 1 giugno e Domenica 2 giugno si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 31 And Mese = 7 Then
MsgBox ("Oggi Venerdi 31 luglio, domani Sabato 1 agosto e Domenica 2 agosto si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 31 And Mese = 8 Then
MsgBox ("Oggi Venerdi 31 agosto, domani Sabato 1 settembre e Domenica 2 settembre si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 31 And Mese = 10 Then
MsgBox ("Oggi Venerdi 31 ottobre, domani Sabato 1 novembre e Domenica 2 novembre si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
ElseIf GIORNO = 31 And Mese = 12 Then
MsgBox ("Oggi Venerdi 31 dicembre, domani Sabato 1 gennaio e Domenica 2 gennaio si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
Else
If Mese = 1 Then
Mese = "Gennaio"
ElseIf Mese = 2 Then Mese = "Febbraio"
ElseIf Mese = 3 Then Mese = "Marzo"
ElseIf Mese = 4 Then Mese = "Aprile"
ElseIf Mese = 5 Then Mese = "Maggio"
ElseIf Mese = 6 Then Mese = "Giugno"
ElseIf Mese = 7 Then Mese = "Luglio"
ElseIf Mese = 8 Then Mese = "Agosto"
ElseIf Mese = 9 Then Mese = "Settembre"
ElseIf Mese = 10 Then Mese = "Ottobre"
ElseIf Mese = 11 Then Mese = "Novembre"
ElseIf Mese = 12 Then Mese = "Dicembre"
End If
MsgBox ("Oggi Venerdi " & CInt(GIORNO) & ", domani Sabato " & CInt(GIORNO + 1) & " e Domenica " & CInt(GIORNO + 2) & " " & Mese & " si festeggia (o si ricorda):" & _
Chr(13) & Chr(13) & Festeggiati)
End If
ElseIf Rst1.RecordCount <> 0 And Weekday(Date) <> 6 Then
MsgBox ("Oggi " & Date & " si festeggia (o si ricorda):" & Chr(13) & Chr(13) & Festeggiati)
Else
MsgBox ("Oggi " & Date & " non si festeggia (o si ricorda) niente.")
End If
Set Rst1 = Nothing
Errori:
If Err.Number = 3021 Then
MsgBox ("Oggi " & Date & " non si festeggia (o si ricorda) niente.")
PrimoAccesso = False
End If
|
7 - Copia dati in nuova tabella
Public Function CopiaDatiInNewTab()
Dim Rst1 As New ADODB.Recordset
Dim Rst2 As New ADODB.Recordset
Dim Rst3 As New ADODB.Recordset
Dim IDTESTA As Double
Dim InizCorpo As String
On Error GoTo Errori
Rst1.CursorLocation = adUseClient
Rst2.CursorLocation = adUseClient
Rst3.CursorLocation = adUseClient
Rst1.Open "DATI", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Rst2.Open "DATI_TESTA", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Rst3.Open "DATI_CORPO", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
'DoCmd.OpenQuery "Q_SVUOTA_TAB_DATI
' PARTE INSERIMENTO RECORD DI TESTA
Rst2.AddNew
Rst1.MoveFirst
While Not Rst1.EOF
If Mid(Rst1!CAMPO1, 1, 4) = "DATE" And IsNull(Rst1!CAMPO2) Then
Rst2!DATA = Mid(Rst1!CAMPO1, 5)
Rst1.MoveNext
ElseIf IsNull(Rst1!CAMPO1) And Not IsNull(Rst1!CAMPO2) And Mid(Rst1!CAMPO2, 1) <> "Lunghezza tot./LENGTH" Then
Dim CAMPO As String
CAMPO = Mid(Rst1!CAMPO2, 1, 4)
Select Case CAMPO
Case "TIME"
Rst2!ORA = Mid(Rst1!CAMPO2, 5)
Case "OPER"
Rst2!OPERATORE = Mid(Rst1!CAMPO2, 11)
Case "PROV"
Rst2!PROVA = Mid(Rst1!CAMPO2, 11)
Case "CLIE"
Rst2!CLIENTE = Mid(Rst1!CAMPO2, 9)
End Select
Rst1.MoveNext
ElseIf IsNull(Rst1!CAMPO1) And Mid(Rst1!CAMPO2, 1) = "Lunghezza tot./LENGTH" Then
Rst1.MoveLast
ElseIf Mid(Rst1!CAMPO1, 1, 3) = "END" Then
Rst1.MoveNext
End If
Wend
Rst2.Update
IDTESTA = Rst2!ID_TESTA
' PARTE INSERIMENTO RECORD DEL CORPO
Rst1.MoveFirst
InizCorpo = "Lunghezza tot./LENGTH"
Rst1.Find "[CAMPO2] = '" & InizCorpo & "'"
While Not Rst1.EOF And IsNull(Rst1!CAMPO1)
Rst3.AddNew
Rst3!ID_TESTA = IDTESTA
Rst3!COLONNA1 = Rst1!CAMPO2 'DESCRIZIONE
Rst3!COLONNA2 = Rst1!CAMPO3 'NOMINALE
Rst3!COLONNA3 = Rst1!Campo4 'RILEVATO
Rst3!COLONNA4 = Rst1!Campo5 'TOLLERANZA+
Rst3!COLONNA5 = Rst1!Campo6 'TOLLERANZA-
Rst3!COLONNA6 = Rst1!campo7 'DEVIAZIONE
Dim ValTolMax, ValTolMin, ValDEV, RangeTOT, RangePARZ As Single
ValTolMax = CSng(Rst1!Campo5)
ValTolMin = CSng(Rst1!Campo6)
ValDEV = CSng(Rst1!campo7)
RangeTOT = ValTolMax - ValTolMin
RangePARZ = RangeTOT / 8
Select Case ValDEV
Case ValTolMin To ValTolMin + RangePARZ
Rst3![F-TOLL] = "----"
Case ValTolMin + RangePARZ To ValTolMin + RangePARZ * 2
Rst3![F-TOLL] = "---"
Case ValTolMin + RangePARZ * 2 To ValTolMin + RangePARZ * 3
Rst3![F-TOLL] = "--"
Case ValTolMin + RangePARZ * 3 To ValTolMin + RangePARZ * 4
Rst3![F-TOLL] = "-"
Case ValTolMin + RangePARZ * 4 To ValTolMin + RangePARZ * 5
Rst3![F-TOLL] = "+"
Case ValTolMin + RangePARZ * 5 To ValTolMin + RangePARZ * 6
Rst3![F-TOLL] = "++"
Case ValTolMin + RangePARZ * 6 To ValTolMin + RangePARZ * 7
Rst3![F-TOLL] = "+++"
Case ValTolMin + RangePARZ * 7 To ValTolMax
Rst3![F-TOLL] = "++++"
Case Is > ValTolMax
Rst3![F-TOLL] = ValDEV - ValTolMax
Case Is < ValTolMin
Rst3![F-TOLL] = ValTolMin + ValDEV
End Select
Rst3.Update
Rst1.MoveNext
Wend
Set Rst1 = Nothing
Set Rst2 = Nothing
Set Rst3 = Nothing
Errori:
If Err.Number = -2147217900 Then
MsgBox ("ATTENZIONE! Manca il file DEFINITIVO.STA nella cartella " & PercFileSTA)
End If
End Function
|
8 - Quante volte ricorre un carattere in una stringa
Public Function QuanteVolte(car As String, str As String) As Long
If Len(car) <> 1 Then Err.Raise 5 ' car DEVE essere 1 carattere !
QuanteVolte = Len(str) - Len(Replace(str, car, "", , , vbTextCompare))
End Function
|
9 - Dimensiona le colonne di una SSTAB
Public Function RegolaColonne(Numero As Byte)
Dim DimDATA As Integer
Dim DimCheck As Integer
DimDATA = 1040
DimCheck = 580
Forms![01_M_PRINCIPALE]("SM1_TITOLO" & Numero)!NOME_CAMPO.ColumnWidth = DimDATA
Forms![01_M_PRINCIPALE]("SM1_TITOLO" & Numero)!NOME_CAMPO.ColumnWidth = DimCheck
End Function
|
10 - Funzione GestioneLoghi(Me.Report.Name)
Call GestioneLoghi(Me.Report.Name)
Public Function GestioneLoghi(NomeReport As String)
Reports(NomeReport)!ImmLOGO1.Picture = "C:\PERCORSO\Logo1.jpg"
Reports(NomeReport)!ImmLOGO2.Picture = "C:\PERCORSO\Logo2.jpg"
Reports(NomeReport)!ImmLOGO3.Picture = "C:\PERCORSO\Logo3.jpg"
......
End Function
|
11 - Sfoglia le cartelle di C:
'APRE SOLO FILE PDF ..... da verificare
Public Function SFOGLIA_CARTELLE()
Dim sh As Object, obj As Object, cNomefile As String, fso As Object
Set sh = CreateObject("Shell.Application")
On Error Resume Next
Set obj = sh.BrowseForFolder(Me.Hwnd, "Selezionare un file", 16385, 17)
If Err.Number <> 0 Then
Set obj = Nothing
End If
On Error GoTo 0
If obj Is Nothing Then
cNomefile = ""
Else
With obj
cNomefile = .ParentFolder.ParseName(.Title).Path
End With
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(cNomefile) Then
cNomefile = ""
End If
Set fso = Nothing
End If
Set sh = Nothing
If cNomefile <> "" Then
txtCasella.Value = cNomefile
End If
End Sub
|
12 - Leggere dati da un foglio EXCEL collegato come tabella
Public Function LeggiDatiFoglioEXCEL()
Dim Rst1 As New ADODB.Recordset
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim A, B, C, D As Integer
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
'Set xlBook = xlApp.Workbooks.Open(CurrentProject.Path & "\FileDaBanca.xls")
Set xlBook = xlApp.Workbooks.Open("C:\Users\riccardo_morosini\Desktop\CANONI_BRENO\PROVA_CANONI.xlsx")
Rst1.CursorLocation = adUseClient
Rst1.Open "T_TMP_FOGLI", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
If Rst1.RecordCount > 0 Then Rst1.MoveFirst
Set xlSheet = xlBook.Worksheets(NomeFoglio)
A = 18
While A <= 60
' VERIFICO PARTENDO DALLA CELLA [G18]=QUANTITA' SE C'E' UN VALORE
If xlSheet.Cells(A, 7) <> "" Then
' SE C'E'
If xlSheet.Cells(A, 4) <> "" Then
Rst1.AddNew
Rst1!CLIENTE = xlSheet.Cells(3, 6) 'F3
Rst1!RIFERIMENTO = xlSheet.Cells(2, 6) 'F2
Rst1!CODICE_PANTHERA = xlSheet.Cells(2, 10) 'J2
Rst1!CODICE1 = xlSheet.Cells(A, 4) 'D&"A"
Rst1!CODICE2 = xlSheet.Cells(A, 5) 'E&"A"
Rst1!DESCRIZIONE = xlSheet.Cells(A, 6) 'F&"A"
Rst1!QUANTITA = xlSheet.Cells(A, 7) 'G&"A"
Rst1!CANONE = xlSheet.Cells(A, 95) 'CQ&"A"
Rst1!DATA_CONTRATTO = xlSheet.Cells(11, 7) 'G11
Rst1.Update
Else
' GENERO UN FILE TXT CONTENENTE IL CLIENTE E LA RIGA CON IL PROBLEMA
File_Anomalie = Trim(Rst1!CLIENTE) & ";" & Trim(Rst1!RIFERIMENTO) & ";CODICE1 NON PRESENTE"
Print #1, File_Anomalie
End If
End If
A = A + 1
Wend
Chiudi:
xlBook.Close SaveChanges:=False
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
Set Rst1 = Nothing
End Function
|
13 - Abilita Maiuscolo
Option Compare Database
Option Explicit
' NON MODIFICARE IL NOME DELLA MACRO AUTOEXEC
'Questo modulo consente di applicare una sorta di Protezione e/o
'impostazione di AVVIO in modo Automatico
'Si può utilizzare lanciandola da un Menù sotto Password
'oppure inserendo un controllo nascosto in una Form.
'Consente di Modificare in un solo colpo tutte le proprietà
'del menù di AVVIO compreso ALLOW_BYPASS_KEY ed eventualmente
'la Macro AUTOEXEC.
'Startup properties
'Private Const strAppTitle As String = "ESEMPIO DISABILITAZIONE TASTO MAIUSCOLO"
Private Const strAppTitle As String = "INSOR"
Private Const strStartUpForm As String = "M_LOGIN"
'Private Const strStartUpMenuBar As String = "mnuPrincipale"
Private Const strStartUpMenuBar As String = ""
Private Const strStartUpShortcutMenuBar As String = vbNullString
Private Const strAppIcon As String = vbNullString
Private Const blnStartUpShowDBWindow As Boolean = False
Private Const blnStartUpShowStatusBar As Boolean = False
Private Const blnAllowShortcutMenus As Boolean = False
Private Const blnAllowFullMenus As Boolean = False
Private Const blnAllowBuiltInToolbars As Boolean = False
Private Const blnAllowToolbarChanges As Boolean = False
Private Const blnAllowBreakIntoCode As Boolean = False
Private Const blnAllowSpecialKeys As Boolean = False
Private Const blnAllowBypassKey As Boolean = False
Public Function Secure()
On Error Resume Next
Call ChangeProperty("AppTitle", dbText, strAppTitle)
Call ChangeProperty("StartUpForm", dbText, strStartUpForm)
Call ChangeProperty("StartUpMenuBar", dbText, strStartUpMenuBar)
Call ChangeProperty("StartupShortcutMenuBar", dbText, strStartUpShortcutMenuBar)
Call ChangeProperty("AppIcon", dbText, strAppIcon)
Call ChangeProperty("StartUpShowDBWindow", dbBoolean, blnStartUpShowDBWindow)
Call ChangeProperty("StartUpShowStatusBar", dbBoolean, blnStartUpShowStatusBar)
Call ChangeProperty("AllowShortcutMenus", dbBoolean, blnAllowShortcutMenus)
Call ChangeProperty("AllowFullMenus", dbBoolean, blnAllowFullMenus)
Call ChangeProperty("AllowBuiltInToolbars", dbBoolean, blnAllowBuiltInToolbars)
Call ChangeProperty("AllowToolbarChanges", dbBoolean, blnAllowToolbarChanges)
Call ChangeProperty("AllowBreakIntoCode", dbBoolean, blnAllowBreakIntoCode)
Call ChangeProperty("AllowSpecialKeys", dbBoolean, blnAllowSpecialKeys)
Call ChangeProperty("AllowBypassKey", dbBoolean, blnAllowBypassKey)
If CurrentDb.Containers("Scripts").Documents("$Autoexec").Name = "$Autoexec" Then _
EnableAutoExec
End Function
Public Function UnSecure()
On Error GoTo Errori
'Call ChangeProperty("AppTitle", dbText, "My Application is UnSecured")
Call ChangeProperty("AppTitle", dbText, strAppTitle)
'Call ChangeProperty("StartUpForm", dbText, vbNullString)
'Call ChangeProperty("StartUpMenuBar", dbText, vbNullString)
'Call ChangeProperty("StartupShortcutMenuBar", dbText, vbNullString)
Call ChangeProperty("AppIcon", dbText, vbNullString)
Call ChangeProperty("StartUpShowDBWindow", dbBoolean, True)
Call ChangeProperty("StartUpShowStatusBar", dbBoolean, True)
Call ChangeProperty("AllowShortcutMenus", dbBoolean, True)
Call ChangeProperty("AllowFullMenus", dbBoolean, True)
Call ChangeProperty("AllowBuiltInToolbars", dbBoolean, True)
Call ChangeProperty("AllowToolbarChanges", dbBoolean, True)
Call ChangeProperty("AllowBreakIntoCode", dbBoolean, True)
Call ChangeProperty("AllowSpecialKeys", dbBoolean, True)
Call ChangeProperty("AllowBypassKey", dbBoolean, True)
If CurrentDb.Containers("Scripts").Documents("Autoexec").Name = "Autoexec" Then _
DisableAutoExec
Errori:
If Err.Number = 3265 Then
Exit Function
End If
End Function
Public Function ChangeProperty(strPropName As String, varPropType As Variant, varPropValue As Variant) As Boolean
Dim prp As Property
On Error GoTo Change_Err
If Len(varPropValue) > 0 Then
CurrentDb.Properties(strPropName) = varPropValue
Else
CurrentDb.Properties.Delete strPropName
End If
ChangeProperty = True
Change_Bye:
Set prp = Nothing
Exit Function
Change_Err:
Select Case Err
Case 3265 'Item not found in this collection.
Resume Next
Case 3270 'prop not found
With CurrentDb
Set prp = .CreateProperty(strPropName, varPropType, varPropValue)
.Properties.Append prp
End With
Resume Next
Case Else
ChangeProperty = False
Resume Change_Bye
End Select
End Function
Public Function DisableAutoExec() As Boolean
Dim docCiclo As DAO.Document
Dim dbs As DAO.Database
Set dbs = CurrentDb
DisableAutoExec = False
For Each docCiclo In dbs.Containers!Scripts.Documents
'Scorre l'insieme Documents del database per verificare la presenza della Macro se esiste la Rinomina
If docCiclo.Name = "Autoexec" Then
DoCmd.Rename "_Autoexec", acMacro, "Autoexec"
DisableAutoExec = True
End If
Next docCiclo
Set dbs = Nothing
End Function
Private Function EnableAutoExec() As Boolean
Dim docCiclo As DAO.Document
Dim dbs As DAO.Database
Set dbs = CurrentDb
EnableAutoExec = False
For Each docCiclo In dbs.Containers!Scripts.Documents
'Scorre l'insieme Documents del database per verificare la presenza della Macro
' se esiste la Rinomina
If docCiclo.Name = "_Autoexec" Then
DoCmd.Rename "Autoexec", acMacro, "_Autoexec"
EnableAutoExec = True
End If
Next docCiclo
Set dbs = Nothing
End Function
Private Sub BLOCCA_Click()
Secure
DoCmd.Close
End Sub
Private Sub OK_Click()
If Me.Password = "1234" Then
Me.SBLOCCA.Enabled = True
Me.BLOCCA.Enabled = True
End If
End Sub
Private Sub SBLOCCA_Click()
UnSecure
DoCmd.Close
End Sub
|
14 - Scrivendo un carattere nella cella VERDE nella ROSSA esce il corrispettivo n ASCII
Option Compare Database
Dim NumTastiPremuti As Integer
Public Function Form_KeyDown(KeyCode As Integer, Shift As Integer)
Me.COdTastoDigitato = KeyCode
Me.ValTastoDigitato = Chr(KeyCode)
NumTastiPremuti = NumTastiPremuti + 1
End Sub
Public Function Form_KeyUp(KeyCode As Integer, Shift As Integer)
If NumTastiPremuti = 1 Then
InizializzaVar1 = KeyCode
ElseIf NumTastiPremuti = 2 Then
InizializzaVar2 = KeyCode
ElseIf NumTastiPremuti = 3 Then
InizializzaVar3 = KeyCode
End If
If InizializzaVar1 = "17" And InizializzaVar2 = "16" And InizializzaVar3 = "27" Then
MsgBox "Hai premuto CTRL+SHIFT"
NumTastiPremuti = 0
InizializzaVar1 = ""
InizializzaVar2 = ""
InizializzaVar3 = ""
ElseIf InizializzaVar1 = "17" And InizializzaVar2 = "16" And InizializzaVar3 = "77" Then
MsgBox "Hai premuto CTRL+SHIFT+M"
NumTastiPremuti = 0
InizializzaVar1 = ""
InizializzaVar2 = ""
InizializzaVar3 = ""
Else
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
InizializzaVar1 = ""
InizializzaVar2 = ""
InizializzaVar3 = ""
Me.COdTastoDigitato = ""
Me.ValTastoDigitato = ""
NumTastiPremuti = 0
DoCmd.Maximize
End Sub
|
15 - Contatori su FORM / Progressivo elaborazione
numPassi = 1
numPasso = numPasso + 1
Forms!M_NOME_FORM![NOME TEXTBOX].Value = "Elabora tabelle: Bonifica I.C.I. (Passo: " & numPasso & "/" & numPassi & ")"
Forms!M_NOME_FORM.Repaint
Forms!M_NOME_FORM![NOME_LABEL].Caption = "Importa nuove commesse (record: " & RecordAttuale & "/" & TOTNuoveColate & ")"
Forms!M_NOME_FORM.Repaint
|
16 - Funzioni CtrlSeNULL, CtrlSeZERO, CtrlSeVUOTO, CtrlSeVUOTOeZERO
Tutte le funzioni sotto possono essere sostituite dalla funzione di sistema Nz
È possibile usare la funzione Nz per restituire zero, una stringa di lunghezza zero (" ") oppure un altro valore
specificato quando un Variant è Null.
Ad esempio, si può usare questa funzione per convertire un valore Null in un altro valore ed evitare che si propaghi tramite un'espressione.
Public Function CtrlSeNULL(CampoControllo As Variant) As Variant
If IsNull(Trim(CampoControllo)) Then
CtrlSeNULL = 0
Else
CtrlSeNULL = Trim(CampoControllo)
End If
End Function
Public Function CtrlSeZERO(CampoControllo As Variant) As Variant
If Trim(CampoControllo) = 0 Then
CtrlSeZERO = ""
Else
CtrlSeZERO = Trim(CampoControllo)
End If
End Function
Public Function CtrlSeVUOTO(CampoControllo As Variant) As Variant
If Trim(CampoControllo) = "" Then
CtrlSeVUOTO = Null
Else
CtrlSeVUOTO = Trim(CampoControllo)
End If
End Function
Public Function CtrlSeVUOTOeZERO(CampoControllo As Variant) As Variant
If Trim(CampoControllo) = "" Or Trim(CampoControllo) = 0 Then
CtrlSeVUOTOeZERO = Null
Else
CtrlSeVUOTOeZERO = Trim(CampoControllo)
End If
End Function
|
17 - Funzioni MASSIMO e MINIMO su un array
Option Compare Database
Public Type MinMaxROFase
Min As Single
Max As Single
RO As Single
FASE As String
End Type
Public Function GetMinMaxROFase(L1 As Single, L2 As Single, L3 As Single, L4 As Single, L5 As Single, L6 As Single, L7 As Single, L8 As Single) As MinMaxROFase
Dim emp As MinMaxROFase
Dim Minimo As Single, Massimo As Single
Dim Valori(7) As Single
Dim FASE As String
' POPOLA L'ARRAY DI T1
Valori(0) = CtrlSeNULL(L1) ' 0°
Valori(1) = CtrlSeNULL(L2) ' 45°
Valori(2) = CtrlSeNULL(L3) ' 90°
Valori(3) = CtrlSeNULL(L4) ' 135°
Valori(4) = CtrlSeNULL(L5) ' 180°
Valori(5) = CtrlSeNULL(L6) ' 225°
Valori(6) = CtrlSeNULL(L7) ' 270°
Valori(7) = CtrlSeNULL(L8) ' 315°
Minimo = 1000
Massimo = -1000
FASE = ""
For x = 0 To 7
If Valori(x) < Minimo Then Minimo = Valori(x)
If Valori(x) > Massimo Then
Massimo = Valori(x)
If x = 0 Then
FASE = "0°"
ElseIf x = 1 Then
FASE = "45°"
ElseIf x = 2 Then
FASE = "90°"
ElseIf x = 3 Then
FASE = "135°"
ElseIf x = 4 Then
FASE = "180°"
ElseIf x = 5 Then
FASE = "225°"
ElseIf x = 6 Then
FASE = "270°"
ElseIf x = 7 Then
FASE = "315°"
End If
End If
Next
'MsgBox ("Minimo: " & Minimo & " : Massimo " & Massimo)
emp.Min = Minimo
emp.Max = Massimo
emp.RO = Minimo - Massimo
emp.FASE = FASE
GetMinMaxROFase = emp
End Function
|
18 - Leggi dati da foglio EXCEL (.xlsx)
Public Function LeggiDatiFoglio02(NomeFoglio As String)
Dim Rst1 As New ADODB.Recordset
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim A, B, C, D As Integer
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
'Set xlBook = xlApp.Workbooks.Open(CurrentProject.Path & "\FileDaBanca.xls")
Set xlBook = xlApp.Workbooks.Open("C:\Users\riccardo_morosini\Desktop\CANONI_BRENO\PROVA_CANONI.xlsx")
Rst1.CursorLocation = adUseClient
Rst1.Open "T_TMP_FOGLI", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
If Rst1.RecordCount > 0 Then Rst1.MoveFirst
Set xlSheet = xlBook.Worksheets(NomeFoglio)
A = 18
While A <= 60
' VERIFICO PARTENDO DALLA CELLA [G18]=QUANTITA' SE C'E' UN VALORE
If xlSheet.Cells(A, 7) <> "" Then
' SE C'E'
If xlSheet.Cells(A, 4) <> "" Then
Rst1.AddNew
Rst1!CLIENTE = xlSheet.Cells(3, 6) 'F3
Rst1!RIFERIMENTO = xlSheet.Cells(2, 6) 'F2
Rst1!CODICE_PANTHERA = xlSheet.Cells(2, 10) 'J2
Rst1!CODICE1 = xlSheet.Cells(A, 4) 'D&"A"
Rst1!CODICE2 = xlSheet.Cells(A, 5) 'E&"A"
Rst1!DESCRIZIONE = xlSheet.Cells(A, 6) 'F&"A"
Rst1!QUANTITA = xlSheet.Cells(A, 7) 'G&"A"
Rst1!CANONE = xlSheet.Cells(A, 95) 'CQ&"A"
Rst1!DATA_CONTRATTO = xlSheet.Cells(11, 7) 'G11
Rst1.Update
Else
' GENERO UN FILE TXT CONTENENTE IL CLIENTE E LA RIGA CON IL PROBLEMA
File_Anomalie = Trim(Rst1!CLIENTE) & ";" & Trim(Rst1!RIFERIMENTO) & ";CODICE1 NON PRESENTE"
Print #1, File_Anomalie
End If
End If
A = A + 1
Wend
Chiudi:
xlBook.Close SaveChanges:=False
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
Set Rst1 = Nothing
End Function
|
19 - Q_ZeroAlSecondoDecimale
NewC: InStr([C];",")
NewC2: Mid([C];InStr([C];",")+1)
NewC3: IIf(Len(Mid([C];InStr([C];",")+1))>1;Mid([C];InStr([C];",")+1);Mid([C];InStr([C];",")+1) & "0")
NewC4: Mid([C];1;InStr([C];",")) & IIf(Len(Mid([C];InStr([C];",")+1))>1;Mid([C];InStr([C];",")+1);Mid([C];InStr([C];",")+1) & "0")
|
20 - Inserire numero progressivo in query di ordinamento
Sotto la slide della query in questione:
Il risultato sarà:
Il codice è questo:
NumIncr: (Select Count (*) FROM T_CTT_CICLO_ST1 as A WHERE [A].[ID_CICLO_CTT] < [T_CTT_CICLO_ST1].[ID_CICLO_CTT])+1
Da verificare perchè non funziona ....
Ho risolto il problema creando al tabella T_TEMP con un campo ContRecT_CTT_CICLO_ST1 NUMERICO con valore predefinito = 1
Public Function ContaRecord(numero As Long, pag As Integer) As Integer
Dim Rst2 As New ADODB.Recordset
Dim ValoreIniziale As Integer
Rst2.CursorLocation = adUseClient
Rst2.Open "SELECT ContRecT_CTT_CICLO_ST1 FROM T_TEMP", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
If PrimoRecord Then
Rst2!ContRecT_CTT_CICLO_ST1 = 1
Rst2.Update
End If
ValoreIniziale = Rst2!ContRecT_CTT_CICLO_ST1
ContaRecord = ValoreIniziale
Rst2!ContRecT_CTT_CICLO_ST1 = Rst2!ContRecT_CTT_CICLO_ST1 + 1
Rst2.Update
PrimoRecord = False
Set Rst2 = Nothing
End Function
Nella tabella del sottoreport inseriamo il campo NumIncr che ci restituirà il numero del record corrente
|
21 - Funzione che ritorna più parametri
Nelle parte di dichiarazione delle variabili:
Option Compare Database
Option Explicit
............................
Public Type NumIDDTTarDTScad
NumID As String
DTTar As String
DTScad As String
End Type
La funzione sarà:
Public Function CercaStrumento(NomeStrumento As String) As NumIDDTTarDTScad
Dim Rst1 As New ADODB.Recordset
Dim emp As NumIDDTTarDTScad
Dim IDMorandini, DataTaratura, DataScadenza As String
Rst1.CursorLocation = adUseClient
Rst1.Open "SELECT * FROM T_CPU_STRUMENTI WHERE NOME_STRUMENTO = '" & Replace(NomeStrumento, "'", "''") & "'",
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
If Rst1.RecordCount = 1 Then
emp.NumID = DaNullaVUOTO(Rst1!NUM_IDENTIFICATIVO_MORANDINI)
emp.DTTar = DaNullaVUOTO(Rst1!DATA_TARATURA_STRUMENTO)
emp.DTScad = DaNullaVUOTO(Rst1!DATA_SCADENZA_STRUMENTO)
Else
emp.NumID = ""
emp.DTTar = ""
emp.DTScad = ""
End If
CercaStrumento = emp
Set Rst1 = Nothing
End Function
Questa funzione potrà essere usata nel seguente modo all'interno del programma:
If Not IsNull(Me.STRUMENTO) Then
Me.ETI_NUMERO_ID.Caption = CercaStrumento(Me.STRUMENTO).NumID
Me.ETI_DATA_SCA.Caption = CercaStrumento(Me.STRUMENTO).DTScad
Me.ETI_DATA_TAR.Caption = CercaStrumento(Me.STRUMENTO).DTTar
Else
Me.ETI_NUMERO_ID.Caption = ""
Me.ETI_DATA_SCA.Caption = ""
Me.ETI_DATA_TAR.Caption = ""
End If
|
22 - Il comando LIKE nel codice VBA
Questo esempio funziona:
Dim Rst1 As New ADODB.Recordset
Rst1.CursorLocation = adUseClient
Rst1.Open "SELECT * FROM [TABELLA/QUERY] WHERE NOME CAMPO like '%" & Me.PARAMETRO & "%'", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
|
23 - Assegnare via codice il RecordSsource
Si crea un interruttore che gestisce il RecordSource della sottotabella:
If Me.Interruttore1 = -1 Then ' Interruttore attivato
Me.M_Maschera_ST1.Form.RecordSource = "SELECT campo1, campo2, campo3 WHERE campo1 = " & Me.X & " AND campo2 = " & Me.Y & " AND Not IsNull(Campo3)"
ElseIf Me.Interruttore1 = 0 Then ' Interruttore disattivato
Me.M_Maschera_ST1.Form.RecordSource = "SELECT campo1, campo2, campo3 WHERE campo1 = " & Me.X & " AND campo2 = " & Me.Y
End If
|
24 - Aprire un recordset su un'altro DB
Dim Rst1 As New ADODB.Recordset
Rst1.CursorLocation = adUseClient
' Si inserisce il [percorso completo].[nome database].[nome tabella]
Rst1.Open "SELECT * FROM F:\CARTELLA1\CARTELLA2\NOME_DATABASE.accdb.NOME_TABELLA", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
PS: non funziona se c'è già una tabella/query con quel nome!
' Vediamo un esempio più complesso
DoCmd.RunSQL "DELETE * FROM T_TEMP_ElenchiDiagrammiInCiclo"
Rst1.CursorLocation = adUseClient
Rst1.Open "SELECT * FROM Tabella1 ORDER BY ANNO", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
While Not Rst1.EOF
Rst2.CursorLocation = adUseClient
Rst2.Open "INSERT INTO Tabella2 ( Campo1, Campo2, Campo3, Campo4, Campo5, ANNO) " & _
"SELECT Campo1, Campo2, Campo3, Campo4, Campo5, " & Rst1!ANNO & " " & _
"FROM (C:\CARTELLA1" & Rst1!ANNO & ".accdb.TABELLA1 LEFT JOIN C:\CARTELLA1" & Rst1!ANNO & ".accdb.TABELLA2 .." & _
"LEFT JOIN C:\CARTELLA1" & Rst1!ANNO & ".accdb.TABELLA2 ON (....) " & _
"WHERE ((Not (Campo1) Is Null)) AND .....", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Rst1.MoveNext
Wend
|
25 - Form ricerca dati
Si crea una form non associata ad alcuna tabella e si creano i combobox per la ricerca dei dati, impostando come valore predefinito *
All'interno di questa form si crea una sottoform con recordsource associato alla tabella dove vogliamo cercare i dati.
Sulla query metteremo nei campi di ricerca il nome delle combobox (ad es: Forms![NOME_FORM]!NOME_COMBOBOX)
|
26 - Collegare una tabella da codice (DAO)
Dim DATABASE As DAO.Database
Dim n As Integer, TableArray() As String
Dim TFileName As String, LinkedTable As TableDef, i As Integer
Dim TFileName2016 As String, LinkedTable2016 As TableDef
Set DATABASE = CurrentDb
' Database esterno
TFileName = "F:\forge\DATABASE\DATABASE.accdb"
DoCmd.Hourglass True
n = 4
ReDim TableArray(1 To n)
' Tabelle esistenti sul database esterno...
TableArray(1) = "T_CPP"
TableArray(2) = "T_CPM"
TableArray(3) = "T_CPU"
TableArray(4) = "T_CTT"
' ... che si vogliono collegare al database corrente con lo stesso nome
For i = 1 To n
Set LinkedTable = DATABASE.CreateTableDef(TableArray(i))
LinkedTable.Connect = ";DATABASE=" & TFileName
LinkedTable.SourceTableName = TableArray(i)
DATABASE.TableDefs.Append LinkedTable
Next i
DATABASE.TableDefs.Refresh
DoCmd.Hourglass False
|
27 - Eliminare una tabella collegata
.......
For I = 1 To n
On Error Resume Next
CurrentDb.Execute "DROP TABLE " & TableArray(I)
Next I
CurrentDb.TableDefs.Refresh
.......
|
28 - Passare il nome della FORM ad una funzione
EF = GestioneDescrizioneANAGRAFE(Me.Report.Name)
Public Function GestioneDescrizioneANAGRAFE(NomeReport As String)
' GESTIONE CAMPO DESCRIZIONE ANAGRAFE
If Reports(NomeReport)!ANNO_CERTIFICATO = Replace(Forms!inizio!EtiANNO.Caption, " ", "") Then
If (Reports(NomeReport)!FORGIATO_TIPO = "" Or IsNull(Reports(NomeReport)!FORGIATO_TIPO)) Then
Reports(NomeReport)!DESCRIZIONE_ITALIA.Visible = True
Reports(NomeReport)!FORGIATO_TIPO.Visible = False
Else
Reports(NomeReport)!DESCRIZIONE_ITALIA.Visible = False
Reports(NomeReport)!FORGIATO_TIPO.Visible = True
End If
If Reports(NomeReport)!FORGIATO_DIMENSIONE_EFFETTIVE = "" Or _
IsNull(Reports(NomeReport)!FORGIATO_DIMENSIONE_EFFETTIVE) Then
Reports(NomeReport)!DESCRIZIONE_DIMENSIONI_EFF.Visible = False
Reports(NomeReport)!FORGIATO_DIMENSIONE_EFFETTIVE.Visible = False
Else
Reports(NomeReport)!DESCRIZIONE_DIMENSIONI_EFF.Visible = True
Reports(NomeReport)!FORGIATO_DIMENSIONE_EFFETTIVE.Visible = True
End If
Else
Reports(NomeReport)!DESCRIZIONE_ITALIA.Visible = True
Reports(NomeReport)!FORGIATO_TIPO.Visible = False
Reports(NomeReport)!DESCRIZIONE_DIMENSIONI_EFF.Visible = False
Reports(NomeReport)!FORGIATO_DIMENSIONE_EFFETTIVE.Visible = False
End If
End Function
|
29 - Funzione GestPagIniFin("Nome_Report")
Call GestPagIniFin("Nome_Report")
Public Function GestPagIniFin(NomeReport As String)
If PagIniziale = 0 And PagFinale = 0 Then
Reports(NomeReport).GestNumPag.Caption = Reports(NomeReport).Page & " / " & Reports(NomeReport).Pages
ElseIf PagIniziale <> 0 And PagFinale = 0 Then
Reports(NomeReport).GestNumPag.Caption = PagIniziale & " / " & Reports(NomeReport).Pages
ElseIf PagIniziale = 0 And PagFinale <> 0 Then
Reports(NomeReport).GestNumPag.Caption = Reports(NomeReport).Page & " / " & PagFinale
ElseIf PagIniziale <> 0 And PagFinale <> 0 Then
Reports(NomeReport).GestNumPag.Caption = Reports(NomeReport).Page + PagIniziale - 1 & " / " & PagFinale
Else
End If
End Function
|
30 - CancellaRecord("NOME_TAB", "NOME_FORM", CP1, CP2)
Call CancellaRecord("NOME_TAB", "NOME_FORM", CP1, CP2) ' CP=Chiave Primaria
Public Function CancellaRecord(NomeTab As String, NomeForm As String, CP1 As Integer, CP2 As Integer)
On Error GoTo ERRORI
Messaggio = "SELEZIONANDO [Sì] CANCELLERAI IL CERTIFICATO N° " & CP1 & "/" & CP2 & Chr(13) & Chr(13) & _
"SELEZIONANDO [No] ANNULLERAI L'OPERAZIONE DI CANCELLAZIONE"
Stile = vbYesNo + vbCritical + vbDefaultButton2
Titolo = "ATTENZIONE"
Risposta = MsgBox(Messaggio, Stile, Titolo)
If Risposta = vbYes Then
DoCmd.RunSQL "DELETE * FROM " & NomeTab & " WHERE CP1 = " & CP1 & " AND cP2 = " & CP2
Forms(NomeForm).Requery
End If
ERRORI:
If Err.Number = 3167 Then
Forms(NomeForm).Requery
End If
End Function
|
31 - Gestione Data Estesa
Public Function CreaDataEstesa() As String
' GENERIAMO LA DATA NEL FORMATO GG MESE AA
Select Case CByte(Mid(Date, 4, 2))
Case 1
CreaDataEstesa = Mid(Date, 1, 2) & " gennaio " & Mid(Date, 7, 4)
Case 2
CreaDataEstesa = Mid(Date, 1, 2) & " febbraio " & Mid(Date, 7, 4)
Case 3
CreaDataEstesa = Mid(Date, 1, 2) & " marzo " & Mid(Date, 7, 4)
Case 4
CreaDataEstesa = Mid(Date, 1, 2) & " aprile " & Mid(Date, 7, 4)
Case 5
CreaDataEstesa = Mid(Date, 1, 2) & " maggio " & Mid(Date, 7, 4)
Case 6
CreaDataEstesa = Mid(Date, 1, 2) & " giugno " & Mid(Date, 7, 4)
Case 7
CreaDataEstesa = Mid(Date, 1, 2) & " luglio " & Mid(Date, 7, 4)
Case 8
CreaDataEstesa = Mid(Date, 1, 2) & " agosto " & Mid(Date, 7, 4)
Case 9
CreaDataEstesa = Mid(Date, 1, 2) & " settembre " & Mid(Date, 7, 4)
Case 10
CreaDataEstesa = Mid(Date, 1, 2) & " ottobre " & Mid(Date, 7, 4)
Case 11
CreaDataEstesa = Mid(Date, 1, 2) & " novembre " & Mid(Date, 7, 4)
Case 12
CreaDataEstesa = Mid(Date, 1, 2) & " dicembre " & Mid(Date, 7, 4)
End Select
End Function
|
32 - Copy file da un percorso ad un altro
Dim PathORIG, PathDEST, File1Nome, File2Nome As String
PathORIG = "C:\percorso origine\"
PathDEST = "C:\percorso destinazione\"
File1Nome = "NomeFileOrigine.lnk"
File2Nome = "NomeFileDestinazione.lnk"
FileCopy PathORIG & File1Nome, PathDEST & File1Nome
FileCopy PathORIG & File2Nome, PathDEST & File2Nome
|
33 - Assegnare permessi a cartelle - funzione icacls
Dim NomeCart As String
NomeCart = "TEST"
If Dir("\\PERCORSO\" & NomeCart, vbDirectory) = "" Then
MkDir ("\\PERCORSO\" & NomeCart)
Else
'Kill ("\\PERCORSO\*.*")
End If
Call Shell("icacls \\192.168.2.2\DATI\Privati\Documenti-TEST\" & NomeCart & "
/grant administrator@dominio.locale:(OI)(CI)F
/grant user1.pippo@dominio.locale:(OI)(CI)F
/grant user2.pluto@dominio.locale:(OI)(CI)F /inheritance:r")
|
34 - Query con nome tabella parametrizzato
Dim Rst1 As New ADODB.Recordset
Dim Rst2 As New ADODB.Recordset
Dim Rst3 As New ADODB.Recordset
Dim Rst4 As New ADODB.Recordset
Dim NumeroGIORNI, J As Byte
Dim ElencoNomiTAB(31) As String ' 32 RECORD IN TABELLLA [T_NOMI_TABELLE]
Rst4.CursorLocation = adUseClient
Rst4.Open "SELECT * FROM T_NOMI_TABELLE ORDER BY PRIORITA", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Rst4.MoveFirst
J = 0
While J < Rst4.RecordCount
ElencoNomiTAB(J) = Rst4!NOME_TABELLA
Rst4.MoveNext
J = J + 1
Wend
J = 0
If Rst2.RecordCount Then Rst2.MoveFirst
Rst4.MoveFirst
While Not Rst2.EOF
Rst3.CursorLocation = adUseClient
Rst3.Open "SELECT * FROM anagrafepulsanti WHERE KEY = '" & Rst2!KEY & "'", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
' SE NON TROVO IL KEY LO CREO
If Rst3.RecordCount = 0 Then
Rst3.AddNew
Rst3!KEY = Rst2!KEY
While Not Rst4.EOF
NOME_CAMPO = Rst4!CODICE_CERTIFICATO
Rst1.CursorLocation = adUseClient
Rst1.Open "SELECT COMMESSA FROM " & ElencoNomiTAB(J) & " WHERE commessa = '" & Rst2!KEY & "'", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
If Rst1.RecordCount > 0 Then Rst3(NOME_CAMPO) = True Else Rst3(NOME_CAMPO) = False
Rst1.Close
Rst4.MoveNext
J = J + 1
Wend
' SE TROVO IL KEY AGGIORNO I CAMPI
Else
If Forms!INIZIO!CCRicompilaTutto = -1 Or SoloQuestaCommessa Then
While Not Rst4.EOF
NOME_CAMPO = Rst4!CODICE
Rst1.CursorLocation = adUseClient
Rst1.Open "SELECT COMMESSA FROM " & ElencoNomiTAB(J) & " WHERE commessa = '" & Rst2!KEY & "'", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
If Rst1.RecordCount > 0 Then Rst3(NOME_CAMPO) = True Else Rst3(NOME_CAMPO) = False
Rst1.Close
Rst4.MoveNext
J = J + 1
Wend
End If
End If
Rst3.Update
Rst3.Close
Rst2.MoveNext
Wend
|
35 - crivere in file Excel xlsx
Public Function ScriviDatiSuFoglio_Grade1()
Dim Rst1 As New ADODB.Recordset
Dim Rst2 As New ADODB.Recordset
Dim riga, COLONNA, COLONNA_INT As Integer
Dim PARAMETRO As String
PARAMETRO = "91"
Rst1.CursorLocation = adUseClient
Rst1.Open "SELECT * FROM TABELLA WHERE CAMPO like '%" & PARAMETRO & "%' ORDER BY CAMPO", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Workbooks.Open FileName:="C:\PERCORSO\FILE_EXCEL.xlsx"
riga = 5
COLONNA = 3
COLONNA_INT = 3
If Rst1.RecordCount > 0 Then Rst1.MoveFirst
While Not Rst1.EOF
Rst2.CursorLocation = adUseClient
Rst2.Open "SELECT * FROM TABELLA WHERE CAMPO = '" & Rst1!CAMPO & "'", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
If Rst2.RecordCount = 1 Then
Worksheets("NOME_FOGLIO").Cells(3, COLONNA_INT).Value = Rst2!colata & " " & Rst2!data_colata
Worksheets("NOME_FOGLIO").Cells(riga, COLONNA).Value = CStr(Rst2!CAMPO1)
riga = riga + 1
Worksheets("NOME_FOGLIO").Cells(riga, COLONNA).Value = CStr(Rst2!CAMPO2)
riga = riga + 1
Worksheets("NOME_FOGLIO").Cells(riga, COLONNA).Value = CStr(Rst2!CAMPO3)
riga = riga + 1
Worksheets("NOME_FOGLIO").Cells(riga, COLONNA).Value = CStr(Rst2!CAMPO4)
riga = riga + 1
Worksheets("NOME_FOGLIO").Cells(riga, COLONNA).Value = CStr(Rst2!CAMPO5)
riga = riga + 1
Worksheets("NOME_FOGLIO").Cells(riga, COLONNA).Value = CStr(Rst2!CAMPO6)
riga = riga + 1
Worksheets("NOME_FOGLIO").Cells(riga, COLONNA).Value = CStr(Rst2!CAMPO7)
riga = riga + 1
Worksheets("NOME_FOGLIO").Cells(riga, COLONNA).Value = CStr(Rst2!CAMPO8)
Else
End If
riga = 5
COLONNA = COLONNA + 1
COLONNA_INT = COLONNA_INT + 2
Rst2.Close
Rst1.MoveNext
Wend
Workbooks.Close
Set Rst1 = Nothing
Set Rst2 = Nothing
End Function
|
36 - Apertura e chiusura file di testo (Open)
Apertura e chiusura file di testo
Per aprire un file di testo si utilizza l'istruzione open
Open nomepercorso For modalità [accesso] As [#]numerofile
nomepercorso = percorso e nome del file da aprire ES:C:\Prova.log
modalità (Obbligatoria) = Parola chiave che specifica la modalità di accesso al file, ovvero Append,Binary, Input, Output o Random.
Se non viene specificata, il file verrà aperto in modalità Random.
Noi analizzeremo:
Input = Apertura file in lettura (se il file non esiste va in errore)
Output = Apertura file in scrittura dati (se il file non esiste viene creato, se il file esiste viene sovrascritto)
Append = Apertura di un file in scrittura dati (se il file non esiste viene creato,se il file esiste viene accodato il testo al contenuto già esistente)
accesso (Facoltativa) = Parola chiave che specifica le operazioni consentite nel file aperto, ovvero: Read, Write o Read Write.
numerofile (Obbligatoria) = Numero di file valido compreso tra 1 e 511 inclusi.
La funzione FreeFile restituisce il primo numero di file disponibile.
Per chiudere il file usare Close [#]numerofile
'Apertura file in Lettura
Dim NumeroFIle as integer
Open "C:\Pova.txt" for Input As #1
.....
close #1 'Chiusura File
'Apertura file in Scrittura
Open "C:\Pova.txt" for output As #1
.....
close #1 'Chiusura File
Open "C:\Pova.txt" for append As #1
.....
close #1 'Chiusura File
'Uso del FreeFile
Dim Numero as Integer
NumeroFIle = FreeFile
Open "C:\Pova.txt" for append As #NumeroFIle
......
close #NumeroFIle 'Chiusura File
|
37 - Lettura dati di un file di testo (input/Line Input)
Lettura dati di un file di testo
Il file deve essere aperto con modalità Input
Vi sono 2 Comandi:
Input: Legge i dati da un file ad accesso sequenziale aperto e li assegna a delle variabili.
Line Input: Legge una singola riga in un file aperto ad accesso sequenziale e la assegna a una variabile.
I dati letti tramite Line Input # vengono in genere scritti su file con Print #.
L'istruzione Line Input # consente di leggere tutti i caratteri in un file un carattere per volta, fino al ritorno a capo (Chr(13))
o alla sequenza ritorno a capo–avanzamento riga (Chr(13) + Chr(10)).
Le sequenze ritorno a capo–avanzamento riga vengono ignorate e non aggiunte alla stringa di caratteri.
Input #numerofile, elencovariabili
Line Input #numerofile, elencovariabili
elencovariabili = variabile che prende il valore della prima riga del file
Dim testo as String
Open "C:\Pova.txt" for input As #1
Line Input#1,testo
close #1 'Chiusura File
|
38 - Scrittura dati in un File di testo (print/write)
Lettura dati di un file di testo
Il file deve essere aperto con modalità Output
Vi sono 2 Metodi per scrivere i dati
Print: Scrive dati formattati per la visualizzazione in un file ad accesso sequenziale.
Write:
I dati scritti tramite Write # vengono in genere letti da un file con Input # .
I dati numerici vengono sempre scritti utilizzando il punto (.) come separatore decimale.
I dati di tipo Boolean vengono stampati i valori #TRUE# o #FALSE#
I dati di tipo Stringa vengono stampati i valori tra Virgolette
In entrambi i codici vengono aggiunti in automatico i carateeri di andata a capo (Chr(13) + Chr(10))
write#numerofile, elencovariabili
oppure
Print#numerofile, elencovariabili
elencovariabili = Una o più espressioni numeriche o espressioni stringa delimitate da virgole che si desidera scrivere sul file.
'apertura file in Lettura
Open "C:\Pova.txt" for Input As #1
Input #1, testo 'Legge la 1° riga del file
Input #1, testo 'Legge la 2° riga del file
close #1 'Chiusura File
'Lettura competa di un file
'Questo esempio legge un intero file
'Visualizza una finestra per ogni riga contenuta nel file
Open "C:\Pova.txt" for Input As #1
do Until EOF(1)
Line Input #1, testo 'Legge la riga del file
msgbox testo 'Visualizza riga letta
loop
close #1 'Chiusura File
'Apertura file in Scrittura
Open "C:\Pova.txt" for output As #1
write #1, "Sono a casa" 'Scrive la 1° riga del file
write #1, "Seconda Riga" 'Scrive la 2° riga del file
close #1 'Chiusura File
|
39 - Esempi funzione timer
Public Function TestTimer()
Dim PauseTime, Start, Finish, TotalTime
If (MsgBox("Press Yes to pause for 5 seconds", 4)) = vbYes Then
PauseTime = 5 ' Set duration.
Start = Timer ' Set start time.
Do While Timer > Start + PauseTime
DoEvents ' Yield to other processes.
Loop
Finish = Timer ' Set end time.
TotalTime = Finish - Start ' Calculate total time.
MsgBox "Paused for " & TotalTime & " seconds"
Else
End
End If
End Function
|
40 - Compatta e ripristina database
Private Sub CompattaERipristina_Click()
Dim sDataFile As String, sDataFileTemp As String, sDataFileBackup As String
Dim s1 As Long, s2 As Long
On Error GoTo ERRORI
If Me.CCAnnoCompattazione = "" Or IsNull(Me.CCAnnoCompattazione) Then
MsgBox "ATTENZIONE! Selezionare l'anno del database da ripristinare"
Exit Sub
End If
sDataFile = "C:\PERCORSO\" & Me.CCAnnoCompattazione & ".accdb"
sDataFileTemp = "C:\PERCORSO\" & Me.CCAnnoCompattazione & "TEMP.accdb"
sDataFileBackup = "C:\PERCORSO\" & Me.CCAnnoCompattazione & "BACKUP " & Format(Now, "YYYY-MM-DD HHMMSS") & ".accdb"
DoCmd.Hourglass True
'get file size before compact
Open sDataFile For Binary As #1
s1 = LOF(1)
Close #1
'backup data file
FileCopy sDataFile, sDataFileBackup
'only proceed if data file exists
If Dir(sDataFileBackup) <> "" Then
'compact data file to temp file
On Error Resume Next
Kill sDataFileTemp
On Error GoTo 0
DBEngine.CompactDatabase sDataFile, sDataFileTemp
If Dir(sDataFileTemp, vbNormal) <> "" Then
'delete old data file data file
Kill sDataFile
'copy temp file to data file
FileCopy sDataFileTemp, sDataFile
'get file size after compact
Open sDataFile For Binary As #1
s2 = LOF(1)
Close #1
DoCmd.Hourglass False
'MsgBox "Compact complete " & vbCrLf & vbCrLf _
& "Size before: " & Round(s1 / 1024 / 1024, 2) & "Mb" & vbCrLf _
& "Size after: " & Round(s2 / 1024 / 1024, 2) & "Mb", vbInformation
Else
DoCmd.Hourglass False
MsgBox "ERROR: Unable to compact data file"
End If
Else
DoCmd.Hourglass False
MsgBox "ERROR: Unable to backup data file"
End If
DoCmd.Hourglass False
MsgBox "FINE COMPATTAZIONE, DATABASE RECUPERATO, VERIFICARE"
ERRORI:
If Err.Number = 3343 Then
MsgBox "IL DATABASE NON ESISTE!"
DoCmd.Hourglass False
Else
DoCmd.Hourglass False
End If
End Sub
|
41 - Funzione collegata tabelle database anni diversi
Public Function ModificaAnnoDB(ANNO As Integer)
Dim Rst1 As New ADODB.Recordset
Dim DATABASE As DAO.Database
Dim n As Integer, TableArray() As String
Dim TFileName As String, LinkedTable As TableDef, I As Integer
DoCmd.Hourglass True
n = 9
ReDim TableArray(1 To n)
' Tabelle esistenti sul database esterno...
TableArray(1) = "Tabella1"
TableArray(2) = "Tabella2"
TableArray(3) = "Tabella3"
TableArray(4) = "Tabella4"
TableArray(5) = "Tabella5"
TableArray(6) = "Tabella6"
TableArray(7) = "Tabella7"
TableArray(8) = "Tabella8"
TableArray(9) = "Tabella9"
' ... che si vogliono collegare al database corrente con lo stesso nome
For I = 1 To n
On Error Resume Next
CurrentDb.Execute "DROP TABLE " & TableArray(I)
Next I
CurrentDb.TableDefs.Refresh
Set DATABASE = CurrentDb
' Database esterno
TFileName = "C:\PERCORSO\NOME_DATABASE" & ANNO & ".accdb"
DoCmd.Hourglass True
ReDim TableArray(1 To n)
' Tabelle esistenti sul database esterno...
TableArray(1) = "Tabella1"
TableArray(2) = "Tabella2"
TableArray(3) = "Tabella3"
TableArray(4) = "Tabella4"
TableArray(5) = "Tabella5"
TableArray(6) = "Tabella6"
TableArray(7) = "Tabella7"
TableArray(8) = "Tabella8"
TableArray(9) = "Tabella9"
' ... che si vogliono collegare al database corrente con lo stesso nome
For I = 1 To n
Set LinkedTable = DATABASE.CreateTableDef(TableArray(I))
LinkedTable.Connect = ";DATABASE=" & TFileName
LinkedTable.SourceTableName = TableArray(I)
DATABASE.TableDefs.Append LinkedTable
Next I
DATABASE.TableDefs.Refresh
' AGGIUNGO L'ANNO NELL'APPOSITA TABELLA
DoCmd.RunSQL "DELETE * FROM T_ANNO_DB"
Rst1.CursorLocation = adUseClient
Rst1.Open "SELECT ANNO FROM T_ANNO_DB", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
' MEMORIZZO L'ANNO CORRETTO NELLA TABELLA [T_ANNO_DB]
If Rst1.RecordCount = 0 Then
Rst1.AddNew
If ANNO = 9999 Then
Rst1!ANNO = "T E S T"
Else
Rst1!ANNO = Mid(ANNO, 1, 1) & " " & Mid(ANNO, 2, 1) & " " & Mid(ANNO, 3, 1) & " " & Mid(ANNO, 4, 1)
End If
Rst1.Update
End If
' REIMPOSTO L'ANNO CORRETTO SULL'ETICHETE [ANNO] DELLA HOME PAGE
If ANNO = 9999 Then
Me.EtiANNO.Caption = "T E S T"
Else
Me.EtiANNO.Caption = Rst1!ANNO
End If
Rst1.Close
DoCmd.Hourglass False
Forms!INIZIO.Refresh
Set Rst1 = Nothing
End Function
|
42 - Copia campi tipo ALLEGATO
Public Function CopiaAllegato(NomeCampo As String, NomeTabella As String, numero As Integer, pag As Integer, TipoCiclo As String)
' CODICE PER LA COPIA DELL'ALLEGATO
Dim rsSource As DAO.Recordset
Dim rsDest As DAO.Recordset
Dim rsPicturesSource As DAO.Recordset
Dim rsPicturesDest As DAO.Recordset
Dim strPath As String
If Dir("C:\PERCORSO\_temp", vbDirectory) = "" Then
MkDir ("C:\PERCORSO\_temp")
Else
Kill ("C:\PERCORSO\_temp\*.*")
End If
strPath = "C:\PERCORSO\\_temp"
Set rsSource = CurrentDb.OpenRecordset("SELECT * FROM " & NomeTabella & " WHERE numero = " & numero & " AND pag = " & pag & " AND TIPO_CICLO = '" & TipoCiclo & "'")
Set rsDest = CurrentDb.OpenRecordset("SELECT * FROM " & NomeTabella & " WHERE numero = " & numero & " AND pag = " & pag & " AND TIPO_CICLO = '" & TipoCiclo & "'")
Set rsPicturesSource = rsSource.Fields(NomeCampo).Value
While Not rsPicturesSource.EOF
' rsPicturesSource.Fields("FileData").SaveToFile strPath & "\" & rsPicturesSource.Fields("FileName")
' SALVO CON UN NOME CHE DEFINISCO IO PER NON AVER 2 O PIU' FILE CON LO STESSO NOME
rsPicturesSource.Fields("FileData").SaveToFile strPath & "\Disegno" & I & Right(rsPicturesSource.Fields("FileName"), 4)
rsDest.Edit
Set rsPicturesDest = rsDest.Fields(NomeCampo).Value
rsPicturesDest.AddNew
' rsPicturesDest.Fields("FileData").LoadFromFile strPath & "\" & rsPicturesSource.Fields("FileName")
rsPicturesDest.Fields("FileData").LoadFromFile strPath & "\Disegno" & I & Right(rsPicturesSource.Fields("FileName"), 4)
rsPicturesDest.Update
rsDest.Update
rsPicturesSource.MoveNext
I = I + 1
Wend
Kill ("C:\PERCORSO\_temp\*.*")
RmDir ("C:\PERCORSO\_temp")
rsSource.Close
rsDest.Close
Set rsSource = Nothing
Set rsPicturesSource = Nothing
Set rsPicturesDest = Nothing
Set rsDest = Nothing
End Function
|
43 - Duplica record
Private Sub ComDuplicaREC_Click()
Dim Rst1 As New ADODB.Recordset
Dim Rst2 As New ADODB.Recordset
Messaggio = "DUPLICARE IL RECORD?" & Chr(13)
Stile = vbYesNo + vbCritical + vbDefaultButton2
Titolo = "ATTENZIONE"
Risposta = MsgBox(Messaggio, Stile, Titolo)
If Risposta = vbYes Then
' TROVO IL NUMERO PIU' ALTO DEL CAMPO CHIAVE PRIMARIA/INDICE E LO AUMENTO DI 1
Rst1.CursorLocation = adUseClient
Rst1.Open "SELECT numero FROM TABELLA ORDER BY numero desc", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
MaxNumCert = Rst1!numero
Rst1.Close
NumRecordTabella = CurrentDb.TableDefs("TABELLA").Fields.Count
Rst1.CursorLocation = adUseClient
Rst1.Open "SELECT * FROM TABELLA WHERE numero = " & Me.numero, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Rst2.CursorLocation = adUseClient
Rst2.Open "SELECT * FROM TABELLA", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
If Rst1.RecordCount = 1 Then
Rst2.AddNew
Rst2!numero = MaxNumCert + 1
For PosCampo = 1 To NumRecordTabella
If Not IsNull(Rst1.Fields(PosCampo)) Then
On Error Resume Next
Rst2.Fields(PosCampo) = Rst1.Fields(PosCampo)
Else
Rst2.Fields(PosCampo) = Null
End If
Next PosCampo
Rst2.Update
MsgBox "RECORD DUPLICATO"
End If
Rst1.Close
Rst2.Close
Forms!M_MASCHERA.Requery
DoCmd.RunCommand acCmdRecordsGoToLast
End If
Set Rst1 = Nothing
Set Rst2 = Nothing
End Sub
|
44 - Set db [CurrentDb, OpenDatabase()]
Dim db As DAO.Database
Set db = CurrentDb
Set db = OpenDatabase("C:\PERCORSO\DBAccess.accdb")
|
45 - Errore Access: query danneggiata
A causare il problema sono gli aggiornamenti:
- KB4484127 per Windows a 64 bit
- KB4484119 per Windows a 32 bit
|
46 - Trova record in FORMS/Vai al record
' CHIUDENDO E RIAPRENDO FUNZIONA
DoCmd.Close
DoCmd.OpenForm "M_CPU_SP_master", acNormal, , "DISEGNO = '" & DisegnoORIGINALE & "-BIS" & "'"
' OPPURE
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[disegno] = '" & DisegnoORIGINALE & "-BIS" & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
|
47 - Macro/Vba 32/64 bit
Riguarda l'errore:
Errore di Run-Time-214741848 (80010108)
Metodo 'EOF' dell'oggetto _Recordset' non riuscito.
|
48 - Aprire DB Access da altro DB Access
Call Shell(SysCmd(acSysCmdAccessDir) & "MSAccess.exe " & Chr(34) & ".....\.......\.....\NomeFile.accdb" & Chr(34), vbMaximizedFocus)
DoCmd.Quit acSave
|
49 - Funzione Sleep per ritardare esecuzione codice
Si inserisce il codice seguente nel modulo API e si crea la funzione Sleep1Sec (per creare una funzione che rallenta l'esecuzione 1s)
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub SleepMilliSeconds(pnMilliseconds As Long)
Sleep pnMilliseconds
End Sub
Call SleepMilliSeconds(1000) ' FERMO L'ESECUZIONE PER 1 Sec
che poi richiameremo nelle funzioni che vogliamo rallentare
|
50 -
|
S1 - Script1 - Cancellazione file e directory con più di N giorni
FORFILES /P "C:\--PERCORSO--\" /M *.* /D -180 /C "CMD /C DEL @PATH"
FORFILES /P "C:\--PERCORSO--\" /D -180 /C "cmd /C if @isdir==TRUE rmdir @path /S /Q"
|