Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
Ciao,
penso che tu ti voglia riferire ad delle sottomaschere ed ai relativi eventi.
Non prendermi per pignolo, è solo che la chiarezza dei concetti aiuta te a capire e noi ad aiutarti.
Una funzione è una routine che restituisce qualcosa, (un valore), una sub invece "fa" delle cose senza restituirti un valore.
Da quello che vedo a te serve una sub pubblica (poichè deve essere richiamata da diverse parti del programma).
E' corretto quindi che tu abbia creato un modulo, non di classe, ed abbia pensato di inserirci dentro il codice comune.
Detto questo la routine va in errore perchè Me da indicazione al programma di riferirsi all'oggetto corrente, sia esso maschera o report. Spostando il codice fuori dalla tua form (principale o sottomaschera) il riferimento a Me non è più valido.
Serve quindi che sull'evento click del pulsante, che se ho inteso bene è stato creato nella sottomaschera, tu richiami la sub passandogli come parametro il riferimento alla sottomaschera corrente che ha richiamato la routine.
Interpreto bene dicendo che il nome della maschera principale è tb-preventivi e che il pulsante da cui lanci la procedura si trova nella sottomaschera?
Prova in questo modo:
Nell'evento su click del pulsante inserisci questo codice.
Call Aggiorna(Me)
Invece in un nuovo modulo inserisci questa routine
Public Sub Aggiorna(ByVal objSottomaschera As Form)
Dim Previsto As Integer
Dim copertofino As Integer
Dim interazione As Integer
Dim annocorrente As Integer
Dim count As Integer
Dim prezzo As Integer
Dim i As Integer
Dim contratto As String
Dim Categoria As String
Dim Scadenza As String
Dim serieanni() As String
Dim frmPri As Form
Dim frmSub As Form
Set frmPri = Forms![tb-preventivi]
Set frmSub = objSottomaschera
Previsto = frmSub![Previsto]
Scadenza = frmSub![Scadenza]
contratto = frmPri![Durata contratto].Value
annocorrente = Year(Now())
If IsNull(frmSub![Coperto fino]) Then
copertofino = 0
Else
copertofino = frmSub![Coperto fino]
End If
If IsNull(frmSub![Prezzo di listino]) Then
prezzo = 0
Else
prezzo = frmSub![Prezzo di listino]
End If
If (copertofino - annocorrente) > 0 Then
copertofino = (copertofino - annocorrente)
End If
'______________________________________________________
If (Scadenza = "annuale") Then
Scadenza = "1,1,1,1,1,1"
End If
If (Scadenza = "biennale") Then
Scadenza = "1,0,1,0,1,0"
End If
If (Scadenza = "triennale") Then
Scadenza = "1,0,0,1,0,0"
End If
If (Scadenza = "quadriennale") Then
Scadenza = "1,0,0,0,1,0"
End If
If (Scadenza = "contratto") Then
Scadenza = "1,0,0,0,0,0"
End If
'______________________________________________________
If (contratto = "annuale") Then
interazione = 1
End If
If (contratto = "biennale") Then
interazione = 2
End If
If (contratto = "triennale") Then
interazione = 3
End If
If (contratto = "quadriennale") Then
interazione = 4
End If
If (contratto = "quinquennale") Then
interazione = 5
End If
If (contratto = "sessennale") Then
interazione = 6
End If
For i = 1 To copertofino
Scadenza = "0," & Scadenza
Next i
serieanni = Split(Scadenza, ",")
count = 0
For i = 1 To interazione
If (serieanni(count) = "1") Then
Select Case count
Case 0
frmSub![Anno1] = prezzo
Case 1
frmSub![Anno2] = prezzo
Case 2
frmSub![Anno3] = prezzo
Case 3
frmSub![Anno4] = prezzo
Case 4
frmSub![Anno5] = prezzo
Case 5
frmSub![Anno6] = prezzo
Case Else
'???
End Select
End If
count = 1 + count
Next i
If ([Previsto]) = 0 Then
frmSub![Anno1] = ""
frmSub![Anno2] = ""
frmSub![Anno3] = ""
frmSub![Anno4] = ""
frmSub![Anno5] = ""
frmSub![Anno6] = ""
End If
Set frmPri = Nothing
Set frmSub = Nothing
End Sub
David
