Grazie Infinite Anthony e scusami sè ti ho chiesto tutto ciò innescando una tua Ilarità nei miei confronti
No, non vedo "perchè" avrei dovuto prenderti in giro o arrabbiarmi; ne' vedo "dove" l'avrei fatto.
Se alludi a "Insomma vorresti fare un ibrido tra la tua soluzione e quanto ho proposto io" allora era un tentativo di sintetizzare la mia interpretazione della tua richiesta, cosi' si capiva anche a cosa era relativa la mia successiva risposta.
Andiamo avanti con serenita', dunque; pero' bisogna capirsi...
Io non ho capito se quello che hai fatto e' un lavoro per te o se dovrebbe servire a qualcun altro.
La mia impressione e' che dovrebbe servire a qualcun altro, visto che gli ipotetici campi della userform costruibile spaziano da Fornitore a NomeImpiegato a NumeroImpiegati a NumeroDiSerie a StatoCivile DataDiBonifico e tante altre; come se fosse un embrione di una soluzione per tutte le esigenze.
In questo pero' io vedo un paio di lacune pesanti:
-e' l'utente che si compone la sua userform all'avvio del programma; ma secondo me un addetto all'ufficio acquisti deve lavorare con una form che non si inventa lui a suo piacimento; idem l'addetto alla gestione del personale; idem l'addetto alle spedizioni.
-siccome ognuno si compone il suo ambiente di lavoro, il programmatore non sa se il contenuto di del terzo Textbox e' un numero d'ordine o un numero di telefono, e mi chiedo come fara' a trattarlo.
-siccome l'addetto agli acquisti si inventa giorno per giorno la sua form, non siamo certi che quando emette un ordine abbia inserito anche (mettiamo) la data di consegna e il riferimento all'offerta del fornitore; come si controllera' il comportamento del fornitore?
Non parlo della complessita' del database sottostante, che dovra' necessariamente comprendere tutti i potenziali campi che l'utente di turno puo' inserire nella sua form, perche' gia' la difficolta' a incrociare il singolo campo con la singola form mi pare una bella complicazione.
Insomma e' di bell'effetto la possibilita' di comporre una form, ma e' quello che viene dopo a posizionarsi tra il difficile e il difficilissimo.
Secondo me e' giusto prevedere un database che includa i campi comuni a tutti gli utenti, ma poi ogni addetto deve avere la sua form da compilare e il programma (le macro sottostanti) deve controllare a posizionare di conseguenza quelle informazioni da /verso il database. E non ha senso impostare un database con dei campi in esubero rispetto a quelli che servono nell'applicazione, salvo che tale disegno sia incluso per prevedere l'introduzione di nuove prestazioni a costi contenuti (parlo di "costo", non di "prezzo di vendita").
Per qui sono poi arrivato ad una conclusione (Pseudo Vera) che e poi questa : Io posso da me creare una Routine che in pratica una volta premuto un Tasto mi faccia comparire partendo da una Determinata cella di un Foglio qualunque i nomi dei report che appartengono al Database che l'utente finale desidera usufruire con la tecnica del Drag end Drop a livello di form come ti ho fatto vedere io .
Poi sfruttando il tuo Aiuto Precedente creo il tutto e fin qui tutto Ok; Per qui ora non solo risulterebbe tutto molto più leggibile e fluido, ma resterebbe da risolvere solo un ultimo problema che è per l'appunto sapere come creare quella Funzione che possa scrivere in Automatico la Variabile (Descriz) nella (Gestioni Nomi)
Questa domanda mi fa pensare che hai immaginato di usare la tua modalita' del drag and drop per progettare e descrivere le form degli utenti; "Bene" perche' questo sarebbe stato anche il mio prossimo suggerimento. Per intenderci: quando vuoi creare la form dell'addetto agli acquisti usi il tuo drag and drop; quando poi pero' premi il tasto "Crea DataBase" questo va a compilare una tabella come quella che avevo creato io a mano, cosicche' l'utente degli Acquisti lavorera' poi con la userform composta apposta per lui e quello alle Spedizioni con un'altra composta apposta per lui.
Tuttavia mi pare che "approfittando" della mia lentezza a rispondere sei andato avanti:
Sono riuscito da me a trovare il sistema per rinominare delle celle adiacenti tutte
sulla stessa riga, in quanto ho trovato su di un libro una cosa più o meno analoga per qui
messa in pratica mi a dato tale risultato.
Detto questo non mi resta altro che chiederti questo tuo piccolo aiutino per risolvere questo
problema.
Ahora sè tu dai un occhiata al mio programma che ti ho appena inviato noterai che tutte le
cella del Foglio 1 a partire dalla Cella "A2" fono alla Cella "O2" si riempiono con i nomi che
si trovano nelle Label dell'userform; Appartenenti ai report del cliente X .
Ahora quello che a me servirebbe solo più , Sarebbe questo :
Sempre prendendo come esempio il mio programma che ti ho appena inviato , a partire dalla cella
"A3" fino alla Cella "O3" io manualmente ho inserito i numeri "1" come da tuo Programma.
Ma sè io Volessi inserirli usando il VBA creando una Funzione che prenda in considerazione le
celle della Seconda riga , io come dovrei comportarmi per creare il tutto in modo Automatico.
Mi spiego meglio :
Mi potrebbe bastare dire semplicemente :"Se Cella(A2) e > 0" allora "Cella(A3).Value=1" in caso
contrario non scrivere nulla; Ho dovrei scrivere altro.
Ma questa non l'ho capita. Perche' secondo me tu dovresti avere in riga 2 (ma perche' metti le informazioni in riga, e non in colonna?) l'elenco di tutti i campi potenzialmente presenti nel database, e poi la macro (quella del pulsante Salva su Foglio Excel) dovrebbe mettere gli "1" in riga 3 in corrispondenza dei campi che sono presenti sulla userform.
Ora se questo e' il tuo obiettivo, assodato che in riga2, da A2 verso destra ci vanno "Tutte" le intestazioni dei campi del database, potrai mettere gli 1 ai campi presenti sulla form con questo codice, che sostituisce la tua attuale Sub MultiArea:
- Codice: Seleziona tutto
Sub MultiArea()
Dim RangeAll As Range, myMatch, lContr As Control
'
With Sheets("Foglio1")
Set RangeAll = .Range(.Range("A2"), .Cells(2, Columns.Count).End(xlToLeft))
End With
RangeAll.Offset(1).ClearContents
For Each lContr In UserForm1.Controls
I = I + 1
If TypeName(lContr) = "Label" Then
myMatch = Application.Match(lContr.Object, RangeAll, 0)
If Not IsError(myMatch) Then
RangeAll.Cells(2, myMatch).Value = 1
' RangeAll.Cells(3, myMatch).Value = lContr.Name
End If
End If
Next lContr
End Sub
Questo presuppone che non ci siano label con lo stesso testo (es Codice ID) ma che ogni testo sia diverso (es Codice ID1, Codice ID2)
Sperando che quanto proposto vada nella direzione che avevi in mente...
Ciao