Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. Visual Studio 6.0
Errore VBA in Access
lunedì 27 ottobre 2008 - 09.38
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
lun 27 ott 2008 - 09:38
Ciao a tutti.
Stò realizzando una piccola applicazione in Access 2003 e mi sono imbattuto per la prima volta nel linguaggio VB.
In una maschera di access dovrei mettere un pulsante che esegua un filtro su dei dati e tramite VB e consultando qualche guida on-line ho scritto il seguente codice
Private Sub Comando_Click()
Me.FilterOn = True
If (AGENDA.[Agenda Ultimo Aggiornamento] < AGENDA.[Agenda Data] Or AGENDA.[Agenda Ultimo Aggiornamento] = "Null") Then
Me.Filter = "Agenda.[Operatore ID]=Forms!AGENDA!Testo33 AND AGENDA.[Agenda Data]>=Forms!AGENDA!Testo29 AND AGENDA.[Agenda Data]<=Forms!AGENDA!Testo31"
Else
Me.Filter = "Agenda.[Operatore ID]=Forms!AGENDA!Testo33 AND AGENDA.[Agenda Ultimo Aggiornamento]>=Forms!AGENDA!Testo29 AND AGENDA.[Agenda Ultimo Aggiornamento]<=Forms!AGENDA!Testo31"
End If
Me.Requery
End Sub
Nell'esecuzione del comando mi da il seguente errore:
Errore run-time 424
Necessario Ogetto
Ed eseguendo il debug viene evidenziata la Riga che contiene l'istruzione IF......
Spero di essere stato chiaro, datemi una mano per favore.
Ciao!!!
Dainesi
Profilo
| Senior Member
476
messaggi | Data Invio:
lun 27 ott 2008 - 09:56
E' giusto che ritorni un errore.
Osserva la tua linea di codice:
If (AGENDA.[Agenda Ultimo Aggiornamento] < AGENDA.[Agenda Data] Or AGENDA.[Agenda Ultimo Aggiornamento] = "Null")
Vista così l'interprete del codice VBA trova un oggetto AGENDA che invoca un metodo od una proprietà "[Agenda Ultimo Aggiornamento]" che chiaramente non era il tuo intendimento.
La tua condizione penso sia il risultato di una query e così devi trattarla.
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
lun 27 ott 2008 - 10:10
praticamente quel tasto deve eseguire una query di selezione su delle date.
Se il campo "Agenda ultimo Aggiornanamento" è presente ed è > di "Agenda Data"
per la selezione deve utilizzare quella data,
Altrimenti come data di selezione deve utilizzare "Agenda Data".
Come risolvo allora???
Dainesi
Profilo
| Senior Member
476
messaggi | Data Invio:
lun 27 ott 2008 - 10:31
Dopo il primo aggiornamento il campo Ultimo Aggiornamento sarà sempre presente per cui quello che devi fare è interrogare i dati ed agire di conseguenza.
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
lun 27 ott 2008 - 10:41
Forse mi sono spiegato male...
Nello stesso record ci sono due valori di date:
1. Agenda Data
2. Agenda Ultimo Aggiornamento
Se il campo "Agenda Ultimo Aggiornamento" è vuoto o < di "Agenda Data" il filtro da applicare deve usare come riferimento "Agenda Data"
Altrimenti il filtro come riferimento di data deve usare "Agenda Ultimo Aggiornamento"
Ti chiedo gentilmente di aiutarmi a scrivere queste poche righe di codice perche non me la cavo molto bene.
Grazie assai
Dainesi
Profilo
| Senior Member
476
messaggi | Data Invio:
lun 27 ott 2008 - 11:28
Prova così
Private Sub Comando_Click()
Dim db As DAO.Database
Dim rc As DAO.Recordset
Dim strSQL As String
Set db = CurrentDb()
strSQL = "SELECT * FROM Agenda"
Set rc = db.OpenRecordset(strSQL, dbOpenSnapshot)
Me.FilterOn = True
If IsNull(rc.Fields("Agenda Ultimo Aggiornamento")) Then
Me.Filter = "Agenda.[Operatore ID]=Forms!AGENDA!Testo33 AND AGENDA.[Agenda Data]>=Forms!AGENDA!Testo29 AND AGENDA.[Agenda Data]<=Forms!AGENDA!Testo31"
ElseIf rc.Fields("Agenda Ultimo Aggiornamento") < rc.Fields("Agenda Data") Then
Me.Filter = "Agenda.[Operatore ID]=Forms!AGENDA!Testo33 AND AGENDA.[Agenda Data]>=Forms!AGENDA!Testo29 AND AGENDA.[Agenda Data]<=Forms!AGENDA!Testo31"
Else
Me.Filter = "Agenda.[Operatore ID]=Forms!AGENDA!Testo33 AND AGENDA.[Agenda Ultimo Aggiornamento]>=Forms!AGENDA!Testo29 AND AGENDA.[Agenda Ultimo Aggiornamento]<=Forms!AGENDA!Testo31"
End If
rc.Close
db.Close
Set rc = Nothing
Set db = Nothing
Me.Requery
End Sub
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
lun 27 ott 2008 - 12:00
Innanzitutto GRAZIE TANTISSIMO!!!!
...ma c'è qualcosa che non va...
E' come se non funzionassero i primi due IF non funzionassero.
In pratica come data di riferimento utilizza sempre "Agenda Ultimo Aggiornamento"
Dainesi
Profilo
| Senior Member
476
messaggi | Data Invio:
lun 27 ott 2008 - 12:05
Per aiutarti meglio dovrei avere il file mdb. Se vuoi .... analizzo, correggo e rimando. Se non è enorme s'intende ...
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
lun 27 ott 2008 - 12:08
ok.
ti mando tutto all'indirizzo ddainesi@infinito.it.
vedo di mandarti solo l'indispensabile
Dainesi
Profilo
| Senior Member
476
messaggi | Data Invio:
lun 27 ott 2008 - 14:35
A me funziona, o così mi pare. Non è che potresti rispiegarmi esattamente cosa ti sembra che non faccia ?
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
lun 27 ott 2008 - 14:47
Se in un qualsiasi record prima a cancellare il campo "nuova data" (che contiene il valore "agenda ultimo aggiornamento" lui non considera il campo "data visita" come data di riferimento da considerare.
ES:
cosi come te l'ho mandato il secondo contatto ha solo il valore data visita = 06/11/2008 e il campo "nuova data" è vuoto.
Se provi a fare la selezione con operatore 4 e come estremi metti
01/10/2008 <-->30/11/2008 dovrebbe trovare entrambi i valori.
Invece trova solo il primo.
Dainesi
Profilo
| Senior Member
476
messaggi | Data Invio:
lun 27 ott 2008 - 14:53
ora provo ...
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
lun 27 ott 2008 - 17:42
Funziona???
Dainesi
Profilo
| Senior Member
476
messaggi | Data Invio:
lun 27 ott 2008 - 18:17
ho avuto un piccolo imprevisto con la corrente, ora provo
...
Ok, prova così:
Sub Comando_Click()
Me.FilterOn = True
Me.Filter = "([Agenda Data]>=Forms!AGENDA!Testo29 AND [Agenda Data]<=Forms!AGENDA!Testo31) OR ([Agenda Ultimo Aggiornamento]>=Forms!AGENDA!Testo29 AND [Agenda Ultimo Aggiornamento]<=Forms!AGENDA!Testo31)"
Me.Requery
End Sub
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
lun 27 ott 2008 - 18:51
Cosi funziona solo se è presente uno dei due valori di data perche prende in considerazione uno o l'altro, ma non funziona se ci sono scritte entrambe le date: in quel caso deve considerare la data maggiore delle due
Dainesi
Profilo
| Senior Member
476
messaggi | Data Invio:
lun 27 ott 2008 - 21:38
>Cosi funziona solo se è presente uno dei due valori di data perche prende in considerazione uno o l'altro, ma non funziona se ci sono scritte entrambe le date: in quel caso deve considerare
>la data maggiore delle due
Modifichiamola così allora
Dim SFiltro as String
sFiltro = "([Agenda Data]>=Forms!AGENDA!Testo29 AND [Agenda Data]<=Forms!AGENDA!Testo31 AND [Agenda Ultimo Aggiornamento]Is NULL) OR"
sFiltro = sFiltro & " ([Agenda Ultimo Aggiornamento]>=Forms!AGENDA!Testo29 AND [Agenda Ultimo Aggiornamento]<=Forms!AGENDA!Testo31)"
Me.Filter = sFiltro
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
lun 27 ott 2008 - 22:44
FUNZIONA PERFETTAMENTE!!!!
....ORA STO CERCANDO DI CAPIRE ALMENO COME FUNZIONA.
GRAZIE TANTO
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
lun 27 ott 2008 - 22:55
Ormai che ci siamo...ti chiedo un ultima cosa semplicissima.
Come faccio a far diventare un applicazione del genere a tutto schermo senza menù e senza la possibilità di accedere alle tabelle ecc...?
Dainesi
Profilo
| Senior Member
476
messaggi | Data Invio:
mar 28 ott 2008 - 09:45
>Ormai che ci siamo...ti chiedo un ultima cosa semplicissima.
>Come faccio a far diventare un applicazione del genere a tutto schermo senza menù e senza la possibilità di accedere alle tabelle ecc...?
La cosa semplicissima non lo è poi così tanto.
Andiamo con ordine.
In Access (così come in tutte le applicazioni Office) esistono delle routine che se presenti vengono eseguiti prima di tutto. Vengono chiamati "autorun".
In Access questo compito è svolto da una macro chiamata AutoExec
Quello che devi fare quindi è avere (o creare) una macro che si chiami AutoExec ed al suo interno richiamare l'apertura di una maschera (quella che vuoi tu)
Devi inoltre codificare l'evento Load (caricamento) della maschera che si andrà ad aprire per far si che la finestra sia massimizzata e che le barre degli strumenti, nonché i menù siano nascosti.
jampicoll
Profilo
| Junior Member
103
messaggi | Data Invio:
mar 28 ott 2008 - 10:14
dal menu avvio riesco ad ottenere l'avvio della maschera ma non riesco ad eliminare il menu principale (quello File---Modifica---Visualizza).
Cmq non vorrei rubarti altro tempo.
Ti ringrazio per il grande aiuto e la disponibilità.
Dainesi
Profilo
| Senior Member
476
messaggi | Data Invio:
mar 28 ott 2008 - 10:29
>dal menu avvio riesco ad ottenere l'avvio della maschera ma non riesco ad eliminare il menu principale (quello File---Modifica---Visualizza).
>Cmq non vorrei rubarti altro tempo. Ti ringrazio per il grande aiuto e la disponibilità.
Giusto per finire in bellezza ....
Inserisci questo codice nella routine Sub Form_Load() della maschera che richiami con la macro AutoExec
Dim i As Integer
For i = 1 To CommandBars.Count
CommandBars(i).Enabled = False
Next
Ciao !
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !