Settare valore condizionato textbox di un report

di il
21 risposte

Settare valore condizionato textbox di un report

Buongiorno a tutti,
ho un problemino da sottoporvi.
Ho bisogno che una serie di caselle di testo (che chiameremo G1,...GN) nel mio report assumano un certo valore (un trattino "-") nel caso in cui il controllo Freq abbia un cert'altro valore (ad es. "1/D", una volta al giorno).
Ora, ogni record del report è formato dunque da X test box, fra cui quelle appena citate.
Tuttavia, il controllo Freq non è visualizzato nel report, fa solo parte dei campi della query di partenza, da cui è estratto il report, ma è possibile richiamarlo (ad esempio lo uso nella formattazione condizionale delle stesse caselle).
In sostanza vorrei che le caselle si riempiano col trattino, se la frequenza è 1/D, in quel dato record, altrimento no.

Ho pensato di farlo con alcune righe di codice nell'evento On load del report ma nessuno dei tentativi fatti riesce.

Elenco campi tabella di partenza: ID, Nome, Procedura, Freq, ecc.
Elenco textbox report: ID, Nome, Procedura,..., G1,G2,...GN.

Sapreste indirizzarmi in qualche modo?

21 Risposte

  • Re: Settare valore condizionato textbox di un report

    Aggiungi nella query un campo calcolato con opportuna funzione di aggiustamento, poi fai poggiare il report sulla query includendo quest'ultimo campo.
  • Re: Settare valore condizionato textbox di un report

    Se ho capito bene cosa intendi dovrei creare un campo calcolato con un if come valore che diventi "-" nel caso frequenza sia "2/T e poi collegare il valore delle text box a quel campo", è questo che intendi?
    Non ne capisco il senso però... perchè non posso usare direttamente Freq in qualche riga di codice? Io credo si possa fare, dato che funziona per la formattazione condizionale.
    Vorrei solo capire come scrivere il codice VAB, pensavo a qualcosa tipo un ciclo for o altro con cui far girare il comando DoCmd.SetProperty... sbaglio?
  • Re: Settare valore condizionato textbox di un report

    Io dico che tutti i campi G1,G2...GN, nella query devono avere la seguente sintassi:
    G1: IIf([Freq]="1/D";"-"&[G1];[G1])
    coerentemente vale per gli altri G.
  • Re: Settare valore condizionato textbox di un report

    Scusami forse mi sono spiegato male, ma i campi G1 etc. non esistono, sono text box che ho messo nel report ma non sono presenti nè nella tabella nè nella query. Mi suggerisci di aggiungerli?
    In ogni caso non sarebbe possibile farlo invece con vba? Grazi per l'aiuto
  • Re: Settare valore condizionato textbox di un report

    Aggiungi quei campi nella query.
    Mi verrebbe da correggere la sintassi:
    G1: IIf([Freq]="1/D";"-"&[Freq];[Freq])

    Però non ho capito quando dici

    Baley ha scritto:


    una volta al giorno
  • Re: Settare valore condizionato textbox di un report

    Ok, in ogni caso la sintassi sarebbe G1: IIf([Freq]="1/D";"-";""), perchè la text box deve essere o vuota o col trattino


    Dove andrebbe poi tale formula? Nella dichiarazione dei campi sul select della query?
    SELECT ID, Nome, Procedura, ..., IIf([Freq]="1/D";"-";"") AS G1, IIf([Freq]="1/D";"-";"") AS G2 etc. ?

    Mi sembra un po' pesante come cosa, preferirei farlo con VBA come ti ribadisco. Anche perchp vorrei gestire allo stesso modo la formattazione condizionale delle celle stesse (sempre in base alla frequenza). Pensavo ad un ciclo tipo For o non so, e di impiegare il comando DoCmd.SetProperty con un IF in precedenza. Pensi sia possibile?

    Potresti indirzzarmi in tal senso? Ti ringrazio ancora
  • Re: Settare valore condizionato textbox di un report

    Io il VBA non ce lo vedo. Piuttosto vorrei capire più chiaramente il tuo contesto.

    Baley ha scritto:


    Elenco campi tabella di partenza: ID, Nome, Procedura, Freq, ecc.
    a me questa tabella non mi sembra normalizzata.
    Se ti dico questo è perché penso che qualcosa si potrebbe migliorare a monte, mettendoti nella condizione di pensare query e report in maniera più snella.
    Veramente anche la query non ho capito di cosa parla.
  • Re: Settare valore condizionato textbox di un report

    Ti assicuro che la tabella è normalizzata. MI esprimo male mentre scrivo magari, e di questo ti chiedo scusa, per tabella di partenza intendevo query, come avevo scritto poco sopra.
    In ogni caso quei campi sono anche nella tabella di partenza, cosa c'è di non normalizzato? è una lista di procedure, ognuna con un nome, una descrizione della procedura, una frequenza settimanale. Non sono dati univoci, scusami?
    Sono quasi certo che la via migliore sia VBA. Ho bisogno di formattare un report in modo condizionale, e per questo voglio usare l'evento ON FORMAT, che mi pare il più adatto.
    Il trattino serve solo a livello visuale, voglio dividere la test box in due, in modo artigianale. Ci sono delle ragioni dietro, non vorrei scrivere un trattato e annoiarti.
    La domanda è molto semplice: come posso fare quello che chiedo (scrivere in una data text box, presente in ogni riga, un valore condizionato ad un campo (frequenza) che fa parte dei "campi esistenti" nel report, seppure ho cancellato il controllo corrispondente).
    Puoi aiutarmi in questo senso, per piacere?
  • Re: Settare valore condizionato textbox di un report

    Ti basta usare delle textbox con origine controllo calcolata, basate su una formuletta =iif(....) che legge il valore dei controlli associati.
    Ovviamente devi rendere NON VISIBILI i controlli associati.

    Se poi vuoi usare il VBA, devi sempre usare.controlli NON ASSOCIATI in aggiunta a quelli associati NON VISIBILI, e su Evento Format della sezione in cui sono tali controlli scrivi la riga di codice:
    
    If Me!Frequenza=... The Me!ContrloNonAssociato=xxx 
    Tuttavia puoi fare anche da query come suggerito... basta sapere quello che si fa, non impuntarti su cose come queste che in realtà non hanno un solo modo di essere fatte, ma usa quello che per te è più adatto... il VBA lo usi se lo sai usare bene.... perché il vantaggio è saper fare debug... e se non lo sai fare cambia poco.
    Ovviamente ogni caso è da analizzare a parte, questo che ti dico è valido per quello che io ho compreso ora.

    P.S. i termini tecnici non sono optional ma indispensabile vocabolario tecnico per confrontarsi con tecnici.
  • Re: Settare valore condizionato textbox di un report

    Grazie, migliorerò per i termini tecnici ma perdonerete la stanchezza e la poca dimistichezza
    in ogni caso come ho detto ho cancellato i controlli associati, ciononostante la formattazione condizionale funziona ugualmente, per cui mi chiedo: devo ripristinarli? Perchè la formattazione funziona lo stesso e il resto no?
    Dato che devo anche far colorare tali celle (con la stessa condizione, F =...), pensavo di usare VBA per impostare valore e colore (setproperty?) delle text box (e poi in futuro estenderlo anche alla altra formattazione condizionale già presente), per cui preferirei quella strada, al netto delle mie deficienze, che vorrei appunto colmare col tempo e con lo studio.
    Grazie
  • Re: Settare valore condizionato textbox di un report

    Buongiorno, ho provato a fare come mi hai detto, peraltro ci avevo provato anche in passato... ma non funziona, ho fatto un test di questo tipo, immagino mi manchi qualcosa (ho rimesso il controllo "Freq" nel report e ll'ho reso non visibile).
    Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
    
    
    If Me!Freq = "3/S" Then Me!G1 = "-"
               
    End If
    
    End Sub

    Cosa sto sbagliando?
  • Re: Settare valore condizionato textbox di un report

    Sto provando a leggere-rileggere tutto, ma trovo che tu dalla tabella al report abbia fatto un passo più grosso della gamba saltando passaggi intermedi. Per questo motivo suggerisco di mettere in piedi una query "inequivocabile" su tutti i campi. Poi sul report scegli quali campi mostrare e su quali fare formattazioni. In quest'ultimo caso ci vedo utile solo la formattazione condizionale.

    Per darti una mano consistente però, (almeno da me) gradirei capirci meglio del tuo progetto. Lo so che forse vado fuori tema, ma se non ho una idea completa del tuo progetto, non ne vengo a capo. Pertanto ti chiedo:
    1- di cosa parla il tuo database
    2- nomi propri di tutte le tabelle che entrano in gioco
    3- nomi propri di tutti i campi delle tabelle con indicazione della chiave primaria
    4- le relazioni
    5- nome proprio della query, quali campi mostra e quali campi calcolati ha
    6- nome proprio del report
    7- fai un esempio esplicito e pratico per entrare meglio nel merito del tuo progetto
  • Re: Settare valore condizionato textbox di un report

    Baley ha scritto:


    Grazie, migliorerò per i termini tecnici ma perdonerete la stanchezza e la poca dimistichezza
    in ogni caso come ho detto ho cancellato i controlli associati, ciononostante la formattazione condizionale funziona ugualmente, per cui mi chiedo: devo ripristinarli? Perchè la formattazione funziona lo stesso e il resto no?
    Dal mio intervento precedente dove hai intuito che i controlli ASSOCIATI vanno cancellati...? Mi pareva di aver scritto il contrario... vanno lasciati ma resi NON VISIBILI... cosa non hai capito...?
    Se devi far riferimento ad un Controllo il controllo deve esserci...!

    Baley ha scritto:


    Dato che devo anche far colorare tali celle (con la stessa condizione, F =...), pensavo di usare VBA per impostare valore e colore (setproperty?) delle text box (e poi in futuro estenderlo anche alla altra formattazione condizionale già presente), per cui preferirei quella strada, al netto delle mie deficienze, che vorrei appunto colmare col tempo e con lo studio.
    Grazie
    Stai dicendo cose che non hanno senso tecnico compiuto, e se vuoi possiamo approfondire questa mia considerazione.
    Es. parli di SetProperty...?
    1) Con che scopo...?
    2) Cosa rappresenta per te il SetProperty...? (Hai letto la guida...?)
    3) Perchè lo ritieni la strada giusta...?

    Credo ci sia una confusione estrema dei Metodi e degli strumenti... motivo per il quale è giusto tu abbia la tua idea... se fosse supportata da una conoscenza magari riusciremmo anche a capirci, altrimenti sembrano cose buttate li e risponderti è complicato.
  • Re: Settare valore condizionato textbox di un report

    @Osvaldo, appena riesco cerco di risponderti con calma e spiegarti tutto con chiarezza, ti ringrazio per la pazienza e l'aiuto

    @Alex, non capisco, come mi è capitato in un precedente tread di dirti, la necessità di rivolgersi in questo modo alle persone. Sono qui per chiedere aiuto, non mi sembra di essere scortese, quindi ti ripeto il tuo tono saccente è fuori luogo: puoi esprimere gli stessi concetti senza cercare di far sembrare il tuo interlocutore un povero sciocco, anche perché corri il rischio di ottenere l'esatto opposto.
    Io non ho intuito proprio nulla, a proposito dei controlli associati, e ti consiglio di rileggere meglio e attentamente dall'inizio la discussione: mi riferivo, infatti, con l'inciso "come ho detto", ad un mio post poco sopra, in cui segnalavo che avevo già eliminato i controlli in questione dal report. Non è stata un'azione successiva al tuo intervento, bensì precedente. Ha dell'incredibile, eh!?
    Analogamente, SetProperty era un modo rapido di riferirsi a DoCmd.SetProperty., che avevo citato in precedenza, nella fretta ho dato per scontato che fosse chiaro mi riferissi a qualche cm più in alto.
    Mi riferisco alla formattazione condizionale, date che il colore (BackColor? vado a memoria) è una proprietà del controllo (mi sbaglio?): voglio formattare con VBA, cosa che peraltro mi suggeristi tu stesso in un tread passato, ma che al momento non potevo fare (avevo delle scadenze).
    Non ho letto la guida, sto studiando VBA e parlo di quello che credo di aver capito. Se sbaglio lo faccio in buona fede, non per approssimazione ma per mancanza di tempo. La guida dice che DoCmd.SetProperty non può essere usato per fare una formattazione condizionale con VBA? Illuminami.
    Come evinci da ciò non sono un analfabeta funzionale e ho capito benissimo quello che hai scritto, infatti, mi chiedevo come mai la mia formattazione condizionale funzionasse sebbene avessi cancellato i controlli dal report, ben prima del tuo intervento. La mia domanda resta inevasa perché quello che non ha capito, nel caso in esame, sei tu: ti segnalo delle evidente carenze nella comprensione di testi scritti, che non siano in codice, chiaramente.
    Ti suggerisco, così come io necessito di una robusto studio di VBA, che provvederò al più presto a compiere, al netto dei molti impegni che ho al momento, di adoperarti per un altrettanto approfondito ripasso della lingua italiana e delle regole di convivenza civile. Consiglio gratuito non richiesto: leggi qualche libro in più e passa meno tempo a programmare, cerca di rafforzare le tue lacune, non è mai troppo tardi.
    TI segnalo infine che è bene praticare l'umiltà nella vita, perché si può essere maestri di VBA ma discenti di lessico e sintassi e di conseguenza incappare in figure barbine del tutto evitabili. Potrei sottolineare il tuo modo di scrivere sgrammaticato ed estremamente sconnesso, con un uso della punteggiatura e delle lettere maiuscole particolarmente fantasioso ma io stesso, seppur scrivendo di fretta mentre lavoro, ho peccato di chiarezza espositiva, per cui non sono senza peccato.
    Se tu fossi supportato da empatia, conoscenza della lingua e persino di logica (assenza della quale mi stupisce peraltro, essendo tu suppongo un programmatore) potremmo anche capirci, allo stato attuale mi pare complicato.
Devi accedere o registrarti per scrivere nel forum
21 risposte