Newsgroup: it.comp.appl.access
Titolo: Ciclare N variabili (non controlli)

Buon giorno,
molto spesso mi ritrovo ad utilizzare questa faq
http://www.donkarl.com/it/?FAQ6.5
 e tutto fila liscio.
 
Ma se al posto di ciclare controlli, avessi la necessità di ciclare variabili?
Esempio:
 
Public Sub Apri5Report(NomeReport1 As String, Optional NomeReport2 As String, Optional NomeReport3 As String, Optional NomeReport4 As String, Optional NomeReport5 As String)
 
    Dim X As Integer
    For X = 1 To 5
            'se NomeReportX non è nullo, allora apri report con nome NomeReportX
    Next X
 
End Sub
 
Essendo solo 5 variabili, chiedo per curiosità (nel caso di specie, basterebbe impostare 4 IFper le 4 variabili optional).
 
Grazie


Ma perche', NomeReportX  non e' di per se un controllo/oggetto del db?
Immagino potresti via   Reports("NomeReport" & X )
 
 


No Roberto NomeReport1, fino a NomeReport5 sono stringhe e contengono il/i nome/i del/dei report da aprire.
Seguendo la tua traccia, ho modificato così:
 
Call Apri5Report (Reports("nomerapporto"))   oppure    Call Apri5Report (Reports("nomerapporto").Report)
Public Sub Apri5Report(NomeReport1 As Access.Report, Optional NomeReport2 As Access.Report, ...
...
ma non essendo già aperto il report in questione, va in errore: Il nome di report "nomerapporto" immesso è errato oppure fa riferimento a un report non aperto o inesistente.
(ovviamente al posto di "nomerapporto" ho messo il nome corretto di un report funzionante)


===========================================
Public Sub Apri5Report(Optional R1, Optional R2, Optional R3, Optional 
R4, Optional R5)
Dim i As Integer
 
For i = 1 To 4
    If IsMissing("R" & i) Then
        DoCmd.OpenReport ("R" & i + 1)
        Exit For
    End If
Next
 
End Sub
=============================================
 
Bruno


Grazie Bruno, ma ricevo sempre l'errore descritto:  Il nome di report "nomerapporto" immesso è errato oppure fa riferimento a un report non aperto o inesistente.


Guarda che la funzione IsMissing fa riferimento all'esistenza o meno
di "Optional Rx" tra le parentesi della Sub Apri5Repory(...) e non
all'esistenza del report Rx.
L'ho usata rarissimamenye in circostanze che nemmeno ricordo,
è pressoché inutile.
 
Se vuoi riferirti all'esistemza o meno di Rx entro Reports
della finestra database, devi andare a vedere se lì dentro
esiste veramente.
Analogamente, con dissimile procedura, se devi controllare
se Rx sia già aperto.
 
Che cosa devi fare di preciso?
 
Bruno


Lo scopo è quello di creare una routine generica, da mettere in un modulo, richiamabile da N maschere, che permetta la stampa di al massimo 5 report contemporaneamente. Ad esempio:
* dal pulsante della maschera1 viene richiesta la stampa di 3 report, 
* dal pulsante della maschera2 viene richiesta la stampa di un solo report,
* dal pulsante della maschera3 viene richiesta la stampa di 5 report,
* ecc ecc...
 
Quando da qualsiasi maschera, chiamo la routine in questione:
* se passo una semplice stringa "ilnomedelmioreport", ho problemi nella routine (DoCmd.OpenReport ("R" & i + 1) chiama il report "R2" e non il nome passato nella variabile R2
* se passo Reports("ilnomedelmioreport"), mi da errore nella maschera, restituendo l'errore ..."ilnomedelmioreport" non è aperto...
 
Ripeto, la routine è già funzionante, grazie a 4 if come il seguente:
DoCmd.OpenReport NomeReport1    'è fisso, se viene invocata la routine, di sicuro si chiederà la stampa di almeno 1 report
If Len(NomeReport2) > 0 Then DoCmd.OpenReport NomeReport2
.....
 
Mi ponevo il problema quando ad essere ciclate non fossero più 5 variabili ma molte di più.
Lo considero come un caso studio.
 
Grazie