Contenuto casella di testo

di il
17 risposte

Contenuto casella di testo

Salve, sono ai primi approcci con access. Ho un report che contiene, tra i tanti dati, anche una casella di testo vuota che vorrei contenesse un nome che prenderà da una tabella in base ad un comando che vorrei aggiungere ad un pulsante di controllo che apre il report . I pulsanti di controllo saranno molteplici nella maschera. Apriranno tutti lo stesso report ma ognuno con "where" diversi (che fungono da filtri dati) . A questo punto ad ogni pulsante di controllo vorrei impostare, olre ai diversi filtri, anche una funzione che dica quali dati deve contenere la casella di controllo. Esiste una funzione che dica quali dati deve contenere la casella di controllo? Se si, me la potreste indicare?

17 Risposte

  • Re: Contenuto casella di testo

    La domanda si riferisce a casella di testo... ora casella di controllo... almeno usiamo i termini corretti...

    Non ci sono funzioni che fanno cose strane... la proprietà VALUE del controllo consegna e di assegnare il valore...
    Mi pare sempre la stessa domanda fatte nell'altro 3d...
  • Re: Contenuto casella di testo

    Ciao scusami, l'altro 3d... ho risolto con la seguente espressione da inserire all'interno della casella di testo.
    =DLookUp("[campo1]";"nome tabella";"[campo2]='......'")

    Se invece di inserirla all'interno della casella di testo, la mettessi in un pulsante di controllo insieme alla funzione apri report funzionerebbe?
    Cioè oltre alla funzione apri report dovrei inserire nel pulsante altra funzione che comandi alla casella di testo dello stesso report di contenere il =DLookUp("[campo1]";"nome tabella";"[campo2]='......'")
    Ovviamente mi dovreste indicare come collocare l'espressione.
  • Re: Contenuto casella di testo

    Devi prendere un libro che ti aiuti a capire i concetti di base... altrimenti farai molta fatica...
    Come ti ho detto devi usare la proprietà Value del controllo ed assegnare il risultato della funzione..
    
    Me!NomeControllo.Value=Dlookup(....)
  • Re: Contenuto casella di testo

    @Alex ha scritto:


    Devi prendere un libro che ti aiuti a capire i concetti di base... altrimenti farai molta fatica...
    Come ti ho detto devi usare la proprietà Value del controllo ed assegnare il risultato della funzione..
    
    Me!NomeControllo.Value=Dlookup(....)
    Dove inserisco questo codice nel pulsante o nella casella di testo?
  • Re: Contenuto casella di testo

    Sono andato all'interno del genera macro all'interno del pulsante; ho impostato un apri report; poi ho aggiunto una nuova azione Imposta-Proprietà/Valore; poi ci sono 3 campi:

    Nome controllo: Testo93
    Proprietà: Valore
    Valore: =DLookUp("[campo1]";"nome tabella";"[campo2]='...'")

    Mi restituisce un errore: "Il nome del controllo Testo93 non è digitato correttamente o fa riferimento in un controllo inesistente".
    Aiutami per favore. Risolto questo problema mi risparmierò molto lavoro.
  • Re: Contenuto casella di testo

    Fai troppa confusione... parli di vba ora usi macro...
    Devi frenare ed iniziare a studiare il prodotto altrimenti non va bene... come da regolamento le basi SERVONO.... anche per interagire con il forum.
  • Re: Contenuto casella di testo

    Scusami, capisco perfettamente. Però potresti aiutarmi a capire questo particolare e poi sicuramente andrò ad approfondire. Io attualmente uso solo macro che offre il programma.
  • Re: Contenuto casella di testo

    Buonasera,
    premetto che concordo appieno con quanto scritto da @Alex vorrei comunque provare ad esprimere il mio punto di vista...
    I pulsanti di controllo saranno molteplici nella maschera. Apriranno tutti lo stesso report
    Ho notato con piacere che, rispetto all'altro 3D, hai cambiato approccio... apri un solo Report invece che 500 Reports
    ...ritengo sia una scelta giusta (è solo un parere... ognuno è libero di agire come vuole).
    dovrei inserire nel pulsante altra funzione che comandi alla casella di testo dello stesso report di contenere il =DLookUp("[campo1]";"nome tabella";"[campo2]='......'")
    Credo tu possa avvalerti di della proprietà "openArgs" del Report.. ma per farlo hai bisogno di accedere al VBA (non credo si possa fare con macro... se mi sbaglio sarei felice che qualcuno mi correggesse).

    Non voglio "pubblicarti" la soluzione perché è contro il regolamento del forum... tuttavia se vorrai dedicare un po di tempo all'approfondimento sarò lieto di "provare" a darti le giuste indicazioni...

    - Nell'evento "su clic" del pulsante devi accedere al codice VBA e non alla composizione guidata macro;
    - Poi devi aprire il Report da codice attraverso la funzione "DoCmd.OpenReport" (su google c'è tutto ciò che serve), impostando i parametri WHERE e openargs
    - openargs è un valore che "passerai" al Report e che potrai utilizzare come "Origine Controllo" nella casella di testo che vuoi personalizzare...

    Aggiungo anche, come parere personale assolutamente non vincolante (il programma è tuo), che forse potresti usare anche un solo pulsante che, in base a selezioni fatte in altri controlli (combobox, option ecc.), eventualmente presenti nella maschera, apre il report opportunatamente filtrato in tutte le sue parti...

    Potrebbe esserti di aiuto anche.... "Come convertire macro in vba" (cerca su google).... Potresti replicare la macro che hai gia creato per aprire il il report filtrato e trasformarla in codice...
  • Re: Contenuto casella di testo

    Angelo_Tbp ha scritto:


    Non voglio "pubblicarti" la soluzione perché è contro il regolamento del forum... tuttavia se vorrai dedicare un po di tempo all'approfondimento sarò lieto di "provare" a darti le giuste indicazioni...
    Non sapevo di questa regola anche perché su altri forum vedo tutte le soluzioni. Comunque ti ringrazio. Non sono esperto di visual basic e volevo risolvere con le macro. L'unico problema è che sbaglio a digitare qualcosa nel Nome controllo della macro
  • Re: Contenuto casella di testo

    Non sapevo di questa regola anche perché su altri forum vedo tutte le soluzioni.
    ... beh è la parte riguardante la "pappa pronta" la sezione 8.e. mi sembra...

    comunque quella che di ho dato è la Soluzione.

    o almeno credo che lo sia... l'alternativa sarebbe quella di valorizzare l'origine controllo della casella di testo (nelle proprietà della stessa) con un valore di riferimento presente in un'altro controllo della maschera con i pulsanti... anche se come soluzione mi sembra "poco elegante".... per fare questo ti basta accedere alla funzione "genera" dell'origine controllo per poi intercettare il controllo nella maschera con i pulsanti....

    è difficile essere più chiaro di così (è so di non esserlo) perché non conoscendo nomi di campo, tabelle ecc. mi ritroverei a dover usare pippo, pluto ecc... che in ogni caso non sarebbero una soluzione neanche se il forum permettesse di richiedere "pappe pronte"...
  • Re: Contenuto casella di testo

    Grazie al tuo aiuto Angelo Tbp, sono arrivato quasi a conclusione. Con la funzione Imposta Proprietà sono riuscito a creare ciò che mi serve. Con la Macro non incorporata funziona tutto perfettamente, e si aggiornano anche le caselle di testo in base al contenuto di un'altra casella combinata. Siccome fare la macro completa è un lavoraccio perché dovrei creare un If con 115 Else If contenenti a loro volta 4 azioni cadauno, ho pensato bene di convertire parte della macro in codice visual basic in modo da lavorare sul codice che è più semplice. Di seguito una parte del codice. Richiamo la funzione Macro_Utente con una macro Esegui codice sul report su caricamento. Purtroppo funziona tranne l'aggiornamento delle tre caselle di testo. Però con la macro tutto alla perfezione.

    Function Macro_Utente()
    If (Forms![Database]!CasellaCombinata47 = "013") Then
    DoCmd.OpenReport "Report", acViewReport, "", "([utenze].[Padiglione/Utente] Like ""*013"")", acNormal
    DoCmd.SetProperty "CasellaTesto1", , DLookup("[Reparto]", "Database", "[Reparto]='013'")
    DoCmd.SetProperty "CasellaTesto2", , DLookup("[Denominazione Reparto]", "Database", "[Reparto]='013'")
    DoCmd.SetProperty "CasellaTesto3", , DLookup("[Generalità Incaricato]", "Database", "[Reparto]='013'")
    ElseIf (Forms![Database]!CasellaCombinata47 = "021") Then
    DoCmd.OpenReport "Report", acViewReport, "", "([utenze].[Padiglione/Utente] Like ""*021"")", acNormal
    DoCmd.SetProperty "CasellaTesto1", , DLookup("[Reparto]", "Database", "[Reparto]='021'")
    DoCmd.SetProperty "CasellaTesto2", , DLookup("[Denominazione Reparto]", "Database", "[Reparto]='021'")
    DoCmd.SetProperty "CasellaTesto3", , DLookup("[Generalità Incaricato]", "Database", "[Reparto]='021'")

    End If

    End Function
  • Re: Contenuto casella di testo

    Non entro nel merito... Tuttavia prova a mettere

    acPropertyValue

    Tra le 2 virgole in

    DoCmd.SetProperty "CasellaTesto", qui, DLookup......

    Forse qualcosa cambia... Non ho testato...
  • Re: Contenuto casella di testo

    Grazie funziona tutto alla perfezione. Risolto
  • Re: Contenuto casella di testo

    Antonior76 ha scritto:


    Function Macro_Utente()
    If (Forms![Database]!CasellaCombinata47 = "013") Then
    DoCmd.OpenReport "Report", acViewReport, "", "([utenze].[Padiglione/Utente] Like ""*013"")", acNormal
    DoCmd.SetProperty "CasellaTesto1", , DLookup("[Reparto]", "Database", "[Reparto]='013'")
    DoCmd.SetProperty "CasellaTesto2", , DLookup("[Denominazione Reparto]", "Database", "[Reparto]='013'")
    DoCmd.SetProperty "CasellaTesto3", , DLookup("[Generalità Incaricato]", "Database", "[Reparto]='013'")
    ElseIf (Forms![Database]!CasellaCombinata47 = "021") Then
    DoCmd.OpenReport "Report", acViewReport, "", "([utenze].[Padiglione/Utente] Like ""*021"")", acNormal
    DoCmd.SetProperty "CasellaTesto1", , DLookup("[Reparto]", "Database", "[Reparto]='021'")
    DoCmd.SetProperty "CasellaTesto2", , DLookup("[Denominazione Reparto]", "Database", "[Reparto]='021'")
    DoCmd.SetProperty "CasellaTesto3", , DLookup("[Generalità Incaricato]", "Database", "[Reparto]='021'")

    End If

    End Function
    
    Function Macro_Utente() 
    Dim sReparto as String
    Dim sFilter   as String
    
    sReparto = Forms![Database]!CasellaCombinata47 
    sFilter = "[utenze].[Padiglione/Utente] Like '*"  & sReparto & "'" 
    
    DoCmd.OpenReport "Report", acViewReport, "", sFilter, acNormal
    
    DoCmd.SetProperty "CasellaTesto1", , DLookup("[Reparto]", "Database", "[Reparto] = '" & sReparto & "'")
    DoCmd.SetProperty "CasellaTesto2", , DLookup("[Denominazione Reparto]", "Database", "[Reparto] = '" & sReparto & "'")
    DoCmd.SetProperty "CasellaTesto3", , DLookup("[Generalità Incaricato]", "Database", "[Reparto] = '" & sReparto & "'")
    
    End Function
    
    
    Se il codice delle 115+1 IF è tutto uguale (ovvero cambia SOLO il reparto) direi che potresti limitari a quanto proposto sopra (salvo eventuali errori di sintassi) .....

    Sinceramente NON capisco a cosa serva il docmd.setproperty (e non so neanche dove risiedano i campi che vuoi impostare).

    Giusto per fare un piccolo passo in avanti ed evitare confusione / fraintendimenti : non chiamare una funzione Macro_Utente() non lo è. E' una funzione di VBA ....
    Assegna dei nomi sensati a controlli, oggetti : CasellaTesto1, 2, 3, DATABASE (per una tabella / query POI) certo NON lo sono.
    Dlookup serve primariamente per recuperare il valore di un campo da una tabella/query : nel tuo caso (ne fai 3 sulla stessa tabella) è certamente meglio usare un recordset ... ma penso che stiamo andando troppo oltre il tuo attuale livello di conoscenza del prodotto.
Devi accedere o registrarti per scrivere nel forum
17 risposte